Our TSAN-ified version of jdk8u reports:
TSAN trace:
WARNING: ThreadSanitizer: data race (pid=1028665)
Write of size 4 at 0x7fb99f5566b8 by thread T5 (mutexes: write M52804, write M52805, write M52776, write M51953):
#0 java.util.HashMap.putVal(ILjava/lang/Object;Ljava/lang/Object;ZZ)Ljava/lang/Object; (HashMap.java:662)
#1 java.util.HashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; (HashMap.java:612)
#2 sun.net.www.http.KeepAliveCache.put(Ljava/net/URL;Ljava/lang/Object;Lsun/net/www/http/HttpClient;)V (KeepAliveCache.java:126)
#3 sun.net.www.http.HttpClient.putInKeepAliveCache()V (HttpClient.java:407)
#4 sun.net.www.http.HttpClient.finished()V (HttpClient.java:364)
#5 sun.net.www.http.KeepAliveStream.close()V (KeepAliveStream.java:97)
#6 sun.net.www.MeteredStream.justRead(J)V (MeteredStream.java:93)
#7 sun.net.www.MeteredStream.read([BII)I (MeteredStream.java:135)
#8 java.io.FilterInputStream.read([BII)I (FilterInputStream.java:133)
#9 sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read([BII)I (HttpURLConnection.java:3375)
#10 sun.nio.cs.StreamDecoder.readBytes()I (StreamDecoder.java:284)
#11 sun.nio.cs.StreamDecoder.implRead([CII)I (StreamDecoder.java:326)
#12 sun.nio.cs.StreamDecoder.read([CII)I (StreamDecoder.java:178)
#13 java.io.InputStreamReader.read([CII)I (InputStreamReader.java:184)
#14 java.io.Reader.read([C)I (Reader.java:140)
...
Previous read of size 4 at 0x7fb99f5566b8 by thread T28:
#0 java.util.HashMap.size()I (HashMap.java:526)
#1 sun.net.www.http.KeepAliveCache.run()V (KeepAliveCache.java:216)
#2 java.lang.Thread.run()V (Thread.java:745)
#3 (Generated Stub)
A quick look at KeepAliveCache.run() shows that it accesses size() outside the synchronized block. This is mostly benign, but could/should be fixed.
TSAN trace:
WARNING: ThreadSanitizer: data race (pid=1028665)
Write of size 4 at 0x7fb99f5566b8 by thread T5 (mutexes: write M52804, write M52805, write M52776, write M51953):
#0 java.util.HashMap.putVal(ILjava/lang/Object;Ljava/lang/Object;ZZ)Ljava/lang/Object; (HashMap.java:662)
#1 java.util.HashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; (HashMap.java:612)
#2 sun.net.www.http.KeepAliveCache.put(Ljava/net/URL;Ljava/lang/Object;Lsun/net/www/http/HttpClient;)V (KeepAliveCache.java:126)
#3 sun.net.www.http.HttpClient.putInKeepAliveCache()V (HttpClient.java:407)
#4 sun.net.www.http.HttpClient.finished()V (HttpClient.java:364)
#5 sun.net.www.http.KeepAliveStream.close()V (KeepAliveStream.java:97)
#6 sun.net.www.MeteredStream.justRead(J)V (MeteredStream.java:93)
#7 sun.net.www.MeteredStream.read([BII)I (MeteredStream.java:135)
#8 java.io.FilterInputStream.read([BII)I (FilterInputStream.java:133)
#9 sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read([BII)I (HttpURLConnection.java:3375)
#10 sun.nio.cs.StreamDecoder.readBytes()I (StreamDecoder.java:284)
#11 sun.nio.cs.StreamDecoder.implRead([CII)I (StreamDecoder.java:326)
#12 sun.nio.cs.StreamDecoder.read([CII)I (StreamDecoder.java:178)
#13 java.io.InputStreamReader.read([CII)I (InputStreamReader.java:184)
#14 java.io.Reader.read([C)I (Reader.java:140)
...
Previous read of size 4 at 0x7fb99f5566b8 by thread T28:
#0 java.util.HashMap.size()I (HashMap.java:526)
#1 sun.net.www.http.KeepAliveCache.run()V (KeepAliveCache.java:216)
#2 java.lang.Thread.run()V (Thread.java:745)
#3 (Generated Stub)
A quick look at KeepAliveCache.run() shows that it accesses size() outside the synchronized block. This is mostly benign, but could/should be fixed.
- duplicates
-
JDK-8302732 sun/net/www/http/HttpClient/MultiThreadTest.java still failing intermittently
-
- Resolved
-
- relates to
-
JDK-8185091 KeepAliveCache questionable code
-
- Closed
-