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

Rare NPE in HPACK HeaderTable.evictEntry

    Details

      Description

      NPE when using the new JDK HTTP Client from JDK10.

      Code is pretty simple. It uses the synchronous HTTP send API, form multiple threads:

      private final HttpClient httpClient = HttpClient.newBuilder()
              .executor(Utils.newFixedThreadPoolExecutor(1, "HttpClient"))
              .build();

      private JsonObject useHttpClient(URL url, String params) throws Exception {
          HttpRequest req = HttpRequest.newBuilder()
                  .uri(url.toURI())
                  .setHeader("Connection", "keep-alive")
                  .setHeader("Accept-Encoding", "gzip")
                  .timeout(timeout)
                  .POST(HttpRequest.BodyPublisher.fromString(params))
                  .build();
          HttpResponse<InputStream> response = httpClient.send(req, HttpResponse.BodyHandler.asInputStream());
          if (response.statusCode() != 200) {
              throw new IOException("Server returned " + response.statusCode());
          }
          String encoding = response.headers().firstValue("content-encoding").orElse("");
          return parseResponseStream(encoding, response.body());
      }

      Sometimes results in NPE:

      java.lang.NullPointerException: null
      at jdk.incubator.http.internal.hpack.HeaderTable$Table.remove(HeaderTable.java:455) ~[jdk.incubator.httpclient:?]
      at jdk.incubator.http.internal.hpack.HeaderTable.evictEntry(HeaderTable.java:264) ~[jdk.incubator.httpclient:?]
      at jdk.incubator.http.internal.hpack.HeaderTable.put(HeaderTable.java:233) ~[jdk.incubator.httpclient:?]
      at jdk.incubator.http.internal.hpack.HeaderTable.put(HeaderTable.java:215) ~[jdk.incubator.httpclient:?]
      at jdk.incubator.http.internal.hpack.Decoder.resumeLiteralWithIndexing(Decoder.java:464) ~[jdk.incubator.httpclient:?]
      at jdk.incubator.http.internal.hpack.Decoder.proceed(Decoder.java:268) ~[jdk.incubator.httpclient:?]
      at jdk.incubator.http.internal.hpack.Decoder.decode(Decoder.java:246) ~[jdk.incubator.httpclient:?]
      at jdk.incubator.http.Http2Connection.decodeHeaders(Http2Connection.java:471) ~[jdk.incubator.httpclient:?]
      at jdk.incubator.http.Http2Connection.processFrame(Http2Connection.java:635) ~[jdk.incubator.httpclient:?]
      at jdk.incubator.http.internal.frame.FramesDecoder.decode(FramesDecoder.java:156) ~[jdk.incubator.httpclient:?]
      at jdk.incubator.http.Http2Connection$FramesController.processReceivedData(Http2Connection.java:195) ~[jdk.incubator.httpclient:?]
      at jdk.incubator.http.Http2Connection.asyncReceive(Http2Connection.java:528) ~[jdk.incubator.httpclient:?]
      at jdk.incubator.http.Http2Connection$Http2TubeSubscriber.processQueue(Http2Connection.java:1054) ~[jdk.incubator.httpclient:?]
      at jdk.incubator.http.internal.common.SequentialScheduler$SynchronizedRestartableTask.run(SequentialScheduler.java:175) ~[jdk.incubator.httpclient:?]
      at jdk.incubator.http.internal.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:147) ~[jdk.incubator.httpclient:?]
      at jdk.incubator.http.internal.common.SequentialScheduler$SchedulableTask.run(SequentialScheduler.java:198) ~[jdk.incubator.httpclient:?]
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135) [?:?]
      Are there any problem in my code? What can be reason for this exception?

      C:\Program Files\Java\jdk-10\bin>java -version
      java version "10" 2018-03-20
      Java(TM) SE Runtime Environment 18.3 (build 10+46)
      Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10+46, mixed mode)


      from https://stackoverflow.com/questions/49587380/nullpointerexception-in-jdk-incubator-httpclient

        Attachments

          Activity

            People

            • Assignee:
              prappo Pavel Rappo
              Reporter:
              prappo Pavel Rappo
            • Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: