Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8185090

Data race in KeepAliveCache

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Duplicate
    • Icon: P4 P4
    • tbd
    • 10
    • core-libs
    • None

      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.

            manc Man Cao
            martin Martin Buchholz
            Votes:
            0 Vote for this issue
            Watchers:
            7 Start watching this issue

              Created:
              Updated:
              Resolved: