jdk/src/java.base/share/classes/java/io/FilterOutputStream.java
changeset 46045 ef191ce8f33f
parent 43794 497288c158bf
--- a/jdk/src/java.base/share/classes/java/io/FilterOutputStream.java	Wed Jul 26 14:09:20 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/io/FilterOutputStream.java	Thu Jul 27 13:13:19 2017 -0700
@@ -50,7 +50,12 @@
     /**
      * Whether the stream is closed; implicitly initialized to false.
      */
-    private boolean closed;
+    private volatile boolean closed;
+
+    /**
+     * Object used to prevent a race on the 'closed' instance variable.
+     */
+    private final Object closeLock = new Object();
 
     /**
      * Creates an output stream filter built on top of the specified
@@ -165,7 +170,12 @@
         if (closed) {
             return;
         }
-        closed = true;
+        synchronized (closeLock) {
+            if (closed) {
+                return;
+            }
+            closed = true;
+        }
 
         Throwable flushException = null;
         try {