harmony-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From telli...@apache.org
Subject svn commit: r820776 - /harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/InputStream.java
Date Thu, 01 Oct 2009 20:37:33 GMT
Author: tellison
Date: Thu Oct  1 20:37:32 2009
New Revision: 820776

URL: http://svn.apache.org/viewvc?rev=820776&view=rev
Log:
Fix unsafe reference to skipBuf (see http://markmail.org/thread/ixknpr4sb63yhvy6)

Modified:
    harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/InputStream.java

Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/InputStream.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/InputStream.java?rev=820776&r1=820775&r2=820776&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/InputStream.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/InputStream.java Thu
Oct  1 20:37:32 2009
@@ -211,11 +211,16 @@
         }
         long skipped = 0;
         int toRead = n < 4096 ? (int) n : 4096;
-        if (skipBuf == null || skipBuf.length < toRead) {
-            skipBuf = new byte[toRead];
+        // We are unsynchronized, so take a local copy of the skipBuf at some
+        // point in time.
+        byte[] localBuf = skipBuf;
+        if (localBuf == null || localBuf.length < toRead) {
+            // May be lazily written back to the static. No matter if it
+            // overwrites somebody else's store.
+            skipBuf = localBuf = new byte[toRead];
         }
         while (skipped < n) {
-            int read = read(skipBuf, 0, toRead);
+            int read = read(localBuf, 0, toRead);
             if (read == -1) {
                 return skipped;
             }



Mime
View raw message