-
Type:
Bug
-
Resolution: Fixed
-
Priority:
P4
-
Affects Version/s: 27
-
Component/s: core-libs
-
b08
The test passes normally; the deadlock is only visible when a thread dump is taken at the end of the test. Other tests might be affected too.
When the client aborts a HTTP3 request in the middle of sending the request body, and the server is actively reading the request, the thread that processes the incoming reset frame may deadlock with the thread that reads from the request body input stream. Stack traces:
"TestServer(3)-pool3" daemon prio=5 Id=78 WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2d3afdc
at java.base@27-internal/jdk.internal.misc.Unsafe.park(Native Method)
- waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2d3afdc
at java.base@27-internal/java.util.concurrent.locks.LockSupport.park(LockSupport.java:369)
at java.base@27-internal/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:520)
at java.base@27-internal/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:4346)
at java.base@27-internal/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:4292)
at java.base@27-internal/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1752)
at java.base@27-internal/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
at app//jdk.httpclient.test.lib.http3.Http3ServerStreamImpl$RequestBodyInputStream.current(Http3ServerStreamImpl.java:315)
at app//jdk.httpclient.test.lib.http3.Http3ServerStreamImpl$RequestBodyInputStream.read(Http3ServerStreamImpl.java:346)
at java.base@27-internal/java.io.InputStream.readNBytes(InputStream.java:411)
at java.base@27-internal/java.io.InputStream.readAllBytes(InputStream.java:348)
at app//AbstractThrowingPublishers$HTTP_FixedLengthHandler.handle(AbstractThrowingPublishers.java:868)
at app//jdk.httpclient.test.lib.common.HttpServerAdapters$HttpChain$Http2Chain.doFilter(HttpServerAdapters.java:911)
at app//jdk.httpclient.test.lib.common.HttpServerAdapters$HttpTestServer$Http2TestContext.handle(HttpServerAdapters.java:1602)
at app//jdk.httpclient.test.lib.common.HttpServerAdapters$HttpTestHandler.doHandle(HttpServerAdapters.java:694)
at app//jdk.httpclient.test.lib.common.HttpServerAdapters$HttpTestHandler.lambda$toHttp2Handler$0(HttpServerAdapters.java:681)
at app//jdk.httpclient.test.lib.common.HttpServerAdapters$HttpTestHandler$$Lambda/0x0000000088157d90.handle(Unknown Source)
at app//jdk.httpclient.test.lib.http3.Http3TestServer.lambda$submitExchange$0(Http3TestServer.java:262)
at app//jdk.httpclient.test.lib.http3.Http3TestServer$$Lambda/0x00000000882e8000.run(Unknown Source)
at java.base@27-internal/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090)
at java.base@27-internal/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614)
at java.base@27-internal/java.lang.Thread.runWith(Thread.java:1529)
at java.base@27-internal/java.lang.Thread.run(Thread.java:1516)
"TestServer(3)-pool1" daemon prio=5 Id=57 WAITING on java.util.concurrent.locks.ReentrantLock$NonfairSync@66570d54 owned by "TestServer(3)-pool3" Id=78
at java.base@27-internal/jdk.internal.misc.Unsafe.park(Native Method)
- waiting on java.util.concurrent.locks.ReentrantLock$NonfairSync@66570d54
at java.base@27-internal/java.util.concurrent.locks.LockSupport.park(LockSupport.java:223)
at java.base@27-internal/java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:790)
at java.base@27-internal/java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1030)
at java.base@27-internal/java.util.concurrent.locks.ReentrantLock$Sync.lock(ReentrantLock.java:154)
at java.base@27-internal/java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:323)
at app//jdk.httpclient.test.lib.http3.Http3ServerStreamImpl$RequestBodyInputStream.close(Http3ServerStreamImpl.java:377)
at app//jdk.httpclient.test.lib.http3.Http3ServerExchange.close(Http3ServerExchange.java:178)
at app//jdk.httpclient.test.lib.http3.Http3ServerExchange.streamResetByPeer(Http3ServerExchange.java:187)
at app//jdk.httpclient.test.lib.http3.Http3ServerStreamImpl.lambda$resetReceived$1(Http3ServerStreamImpl.java:279)
at app//jdk.httpclient.test.lib.http3.Http3ServerStreamImpl$$Lambda/0x00000000882e8230.apply(Unknown Source)
at java.base@27-internal/java.util.concurrent.CompletableFuture.uniApplyNow(CompletableFuture.java:705)
at java.base@27-internal/java.util.concurrent.CompletableFuture.uniApplyStage(CompletableFuture.java:683)
at java.base@27-internal/java.util.concurrent.CompletableFuture.thenApply(CompletableFuture.java:2227)
at app//jdk.httpclient.test.lib.http3.Http3ServerStreamImpl.resetReceived(Http3ServerStreamImpl.java:279)
at app//jdk.httpclient.test.lib.http3.Http3ServerStreamImpl.readLoop0(Http3ServerStreamImpl.java:220)
at app//jdk.httpclient.test.lib.http3.Http3ServerStreamImpl.readLoop(Http3ServerStreamImpl.java:105)
at app//jdk.httpclient.test.lib.http3.Http3ServerStreamImpl$$Lambda/0x00000000882c66a0.run(Unknown Source)
at platform/java.net.http@27-internal/jdk.internal.net.http.common.SequentialScheduler$LockingRestartableTask.run(SequentialScheduler.java:182)
at platform/java.net.http@27-internal/jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:149)
at platform/java.net.http@27-internal/jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(SequentialScheduler.java:207)
at java.base@27-internal/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090)
at java.base@27-internal/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614)
at java.base@27-internal/java.lang.Thread.runWith(Thread.java:1529)
at java.base@27-internal/java.lang.Thread.run(Thread.java:1516)
When the client aborts a HTTP3 request in the middle of sending the request body, and the server is actively reading the request, the thread that processes the incoming reset frame may deadlock with the thread that reads from the request body input stream. Stack traces:
"TestServer(3)-pool3" daemon prio=5 Id=78 WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2d3afdc
at java.base@27-internal/jdk.internal.misc.Unsafe.park(Native Method)
- waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2d3afdc
at java.base@27-internal/java.util.concurrent.locks.LockSupport.park(LockSupport.java:369)
at java.base@27-internal/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:520)
at java.base@27-internal/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:4346)
at java.base@27-internal/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:4292)
at java.base@27-internal/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1752)
at java.base@27-internal/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
at app//jdk.httpclient.test.lib.http3.Http3ServerStreamImpl$RequestBodyInputStream.current(Http3ServerStreamImpl.java:315)
at app//jdk.httpclient.test.lib.http3.Http3ServerStreamImpl$RequestBodyInputStream.read(Http3ServerStreamImpl.java:346)
at java.base@27-internal/java.io.InputStream.readNBytes(InputStream.java:411)
at java.base@27-internal/java.io.InputStream.readAllBytes(InputStream.java:348)
at app//AbstractThrowingPublishers$HTTP_FixedLengthHandler.handle(AbstractThrowingPublishers.java:868)
at app//jdk.httpclient.test.lib.common.HttpServerAdapters$HttpChain$Http2Chain.doFilter(HttpServerAdapters.java:911)
at app//jdk.httpclient.test.lib.common.HttpServerAdapters$HttpTestServer$Http2TestContext.handle(HttpServerAdapters.java:1602)
at app//jdk.httpclient.test.lib.common.HttpServerAdapters$HttpTestHandler.doHandle(HttpServerAdapters.java:694)
at app//jdk.httpclient.test.lib.common.HttpServerAdapters$HttpTestHandler.lambda$toHttp2Handler$0(HttpServerAdapters.java:681)
at app//jdk.httpclient.test.lib.common.HttpServerAdapters$HttpTestHandler$$Lambda/0x0000000088157d90.handle(Unknown Source)
at app//jdk.httpclient.test.lib.http3.Http3TestServer.lambda$submitExchange$0(Http3TestServer.java:262)
at app//jdk.httpclient.test.lib.http3.Http3TestServer$$Lambda/0x00000000882e8000.run(Unknown Source)
at java.base@27-internal/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090)
at java.base@27-internal/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614)
at java.base@27-internal/java.lang.Thread.runWith(Thread.java:1529)
at java.base@27-internal/java.lang.Thread.run(Thread.java:1516)
"TestServer(3)-pool1" daemon prio=5 Id=57 WAITING on java.util.concurrent.locks.ReentrantLock$NonfairSync@66570d54 owned by "TestServer(3)-pool3" Id=78
at java.base@27-internal/jdk.internal.misc.Unsafe.park(Native Method)
- waiting on java.util.concurrent.locks.ReentrantLock$NonfairSync@66570d54
at java.base@27-internal/java.util.concurrent.locks.LockSupport.park(LockSupport.java:223)
at java.base@27-internal/java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:790)
at java.base@27-internal/java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1030)
at java.base@27-internal/java.util.concurrent.locks.ReentrantLock$Sync.lock(ReentrantLock.java:154)
at java.base@27-internal/java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:323)
at app//jdk.httpclient.test.lib.http3.Http3ServerStreamImpl$RequestBodyInputStream.close(Http3ServerStreamImpl.java:377)
at app//jdk.httpclient.test.lib.http3.Http3ServerExchange.close(Http3ServerExchange.java:178)
at app//jdk.httpclient.test.lib.http3.Http3ServerExchange.streamResetByPeer(Http3ServerExchange.java:187)
at app//jdk.httpclient.test.lib.http3.Http3ServerStreamImpl.lambda$resetReceived$1(Http3ServerStreamImpl.java:279)
at app//jdk.httpclient.test.lib.http3.Http3ServerStreamImpl$$Lambda/0x00000000882e8230.apply(Unknown Source)
at java.base@27-internal/java.util.concurrent.CompletableFuture.uniApplyNow(CompletableFuture.java:705)
at java.base@27-internal/java.util.concurrent.CompletableFuture.uniApplyStage(CompletableFuture.java:683)
at java.base@27-internal/java.util.concurrent.CompletableFuture.thenApply(CompletableFuture.java:2227)
at app//jdk.httpclient.test.lib.http3.Http3ServerStreamImpl.resetReceived(Http3ServerStreamImpl.java:279)
at app//jdk.httpclient.test.lib.http3.Http3ServerStreamImpl.readLoop0(Http3ServerStreamImpl.java:220)
at app//jdk.httpclient.test.lib.http3.Http3ServerStreamImpl.readLoop(Http3ServerStreamImpl.java:105)
at app//jdk.httpclient.test.lib.http3.Http3ServerStreamImpl$$Lambda/0x00000000882c66a0.run(Unknown Source)
at platform/java.net.http@27-internal/jdk.internal.net.http.common.SequentialScheduler$LockingRestartableTask.run(SequentialScheduler.java:182)
at platform/java.net.http@27-internal/jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:149)
at platform/java.net.http@27-internal/jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(SequentialScheduler.java:207)
at java.base@27-internal/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090)
at java.base@27-internal/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614)
at java.base@27-internal/java.lang.Thread.runWith(Thread.java:1529)
at java.base@27-internal/java.lang.Thread.run(Thread.java:1516)
- links to
-
Commit(master)
openjdk/jdk/173c3f98
-
Review(master)
openjdk/jdk/29448