From c00de39f340c78799a0a50554fdadb4894a809d6 Mon Sep 17 00:00:00 2001 From: igerasim Date: Mon, 20 Apr 2015 15:17:22 +0300 Subject: [PATCH] 8076405: Improve serial serialization Reviewed-by: alanb, chegar --- src/share/classes/java/io/ObjectInputStream.java | 9 ++++++++- src/share/classes/java/io/SerialCallbackContext.java | 7 +++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/share/classes/java/io/ObjectInputStream.java b/src/share/classes/java/io/ObjectInputStream.java index 15ecd9bee..f7e050e1f 100644 --- a/src/share/classes/java/io/ObjectInputStream.java +++ b/src/share/classes/java/io/ObjectInputStream.java @@ -1829,6 +1829,8 @@ public class ObjectInputStream throws IOException { SerialCallbackContext oldContext = curContext; + if (oldContext != null) + oldContext.check(); curContext = null; try { boolean blocked = desc.hasBlockExternalData(); @@ -1853,6 +1855,8 @@ public class ObjectInputStream skipCustomData(); } } finally { + if (oldContext != null) + oldContext.check(); curContext = oldContext; } /* @@ -1888,7 +1892,8 @@ public class ObjectInputStream handles.lookupException(passHandle) == null) { SerialCallbackContext oldContext = curContext; - + if (oldContext != null) + oldContext.check(); try { curContext = new SerialCallbackContext(obj, slotDesc); @@ -1905,6 +1910,8 @@ public class ObjectInputStream handles.markException(passHandle, ex); } finally { curContext.setUsed(); + if (oldContext!= null) + oldContext.check(); curContext = oldContext; } diff --git a/src/share/classes/java/io/SerialCallbackContext.java b/src/share/classes/java/io/SerialCallbackContext.java index 748d38edb..40090875a 100644 --- a/src/share/classes/java/io/SerialCallbackContext.java +++ b/src/share/classes/java/io/SerialCallbackContext.java @@ -60,6 +60,13 @@ final class SerialCallbackContext { return desc; } + public void check() throws NotActiveException { + if (thread != null && thread != Thread.currentThread()) { + throw new NotActiveException( + "expected thread: " + thread + ", but got: " + Thread.currentThread()); + } + } + private void checkAndSetUsed() throws NotActiveException { if (thread != Thread.currentThread()) { throw new NotActiveException( -- GitLab