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+ }