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

Rare NPE in HPACK HeaderTable.evictEntry

    XMLWordPrintable

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

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

            Dates

              Created:
              Updated:
              Resolved: