Skip to content

Commit 33ed825

Browse files
authored
Fix voidPromise in Http2FrameCodec.writeHeadersFrame (#13958)
Motivation: Writing a Http2HeadersFrame on a new stream with a void promise would throw an IllegalStateException. Modification: Unvoid the promise in the code that requires adding a listener. Result: No IllegalStateException.
1 parent a38a85c commit 33ed825

2 files changed

Lines changed: 10 additions & 1 deletion

File tree

codec-http2/src/main/java/io/netty/handler/codec/http2/Http2FrameCodec.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -403,12 +403,14 @@ private void writeGoAwayFrame(ChannelHandlerContext ctx, Http2GoAwayFrame frame,
403403
}
404404

405405
private void writeHeadersFrame(final ChannelHandlerContext ctx, Http2HeadersFrame headersFrame,
406-
final ChannelPromise promise) {
406+
ChannelPromise promise) {
407407

408408
if (isStreamIdValid(headersFrame.stream().id())) {
409409
encoder().writeHeaders(ctx, headersFrame.stream().id(), headersFrame.headers(), headersFrame.padding(),
410410
headersFrame.isEndStream(), promise);
411411
} else if (initializeNewStream(ctx, (DefaultHttp2FrameStream) headersFrame.stream(), promise)) {
412+
promise = promise.unvoid();
413+
412414
final int streamId = headersFrame.stream().id();
413415

414416
encoder().writeHeaders(ctx, streamId, headersFrame.headers(), headersFrame.padding(),

codec-http2/src/test/java/io/netty/handler/codec/http2/Http2FrameCodecTest.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -844,6 +844,13 @@ public void operationComplete(ChannelFuture future) throws Exception {
844844
assertTrue(listenerExecuted.get());
845845
}
846846

847+
@Test
848+
public void writeHeadersVoidPromise() {
849+
final Http2FrameStream stream = frameCodec.newStream();
850+
channel.writeAndFlush(new DefaultHttp2HeadersFrame(new DefaultHttp2Headers()).stream(stream),
851+
channel.voidPromise());
852+
}
853+
847854
@Test
848855
public void upgradeEventNoRefCntError() throws Exception {
849856
frameInboundWriter.writeInboundHeaders(Http2CodecUtil.HTTP_UPGRADE_STREAM_ID, request, 31, false);

0 commit comments

Comments
 (0)