History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java/pkg/java/io/SerialCallbackContext.java (1 of 18352 files). Show all

Unified · Split

java/pkg/java/io/SerialCallbackContext.java+54−0
@@ -0,0 +1,54 @@
1 /*
2 * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
3 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
4 */
5
6 package java.io;
7
8 /**
9 * Context during upcalls from object stream to class-defined
10 * readObject/writeObject methods.
11 * Holds object currently being deserialized and descriptor for current class.
12 *
13 * This context keeps track of the thread it was constructed on, and allows
14 * only a single call of defaultReadObject, readFields, defaultWriteObject
15 * or writeFields which must be invoked on the same thread before the class's
16 * readObject/writeObject method has returned.
17 * If not set to the current thread, the getObj method throws NotActiveException.
18 */
19 final class SerialCallbackContext {
20 private final Object obj;
21 private final ObjectStreamClass desc;
22 /**
23 * Thread this context is in use by.
24 * As this only works in one thread, we do not need to worry about thread-safety.
25 */
26 private Thread thread;
27
28 public SerialCallbackContext(Object obj, ObjectStreamClass desc) {
29 this.obj = obj;
30 this.desc = desc;
31 this.thread = Thread.currentThread();
32 }
33
34 public Object getObj() throws NotActiveException {
35 checkAndSetUsed();
36 return obj;
37 }
38
39 public ObjectStreamClass getDesc() {
40 return desc;
41 }
42
43 private void checkAndSetUsed() throws NotActiveException {
44 if (thread != Thread.currentThread()) {
45 throw new NotActiveException(
46 "not in readObject invocation or fields already read");
47 }
48 thread = null;
49 }
50
51 public void setUsed() {
52 thread = null;
53 }
54 }