From c5ee30665f36eba6dbd9b842e95458701f815ee1 Mon Sep 17 00:00:00 2001 From: Duan Wei Date: Fri, 26 Nov 2021 10:39:26 +0800 Subject: [PATCH 1/2] fix(#22) --- .../java/io/esastack/httpserver/impl/Http1Handler.java | 9 +++++++++ .../java/io/esastack/httpserver/impl/Http2Handler.java | 6 ++++++ .../io/esastack/httpserver/impl/Http2HeadersImpl.java | 4 ---- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/httpserver/src/main/java/io/esastack/httpserver/impl/Http1Handler.java b/httpserver/src/main/java/io/esastack/httpserver/impl/Http1Handler.java index d242515..f4e419d 100644 --- a/httpserver/src/main/java/io/esastack/httpserver/impl/Http1Handler.java +++ b/httpserver/src/main/java/io/esastack/httpserver/impl/Http1Handler.java @@ -31,6 +31,7 @@ import io.netty.handler.codec.http.DefaultFullHttpResponse; import io.netty.handler.codec.http.FullHttpResponse; import io.netty.handler.codec.http.HttpContent; +import io.netty.handler.codec.http.HttpExpectationFailedEvent; import io.netty.handler.codec.http.HttpHeaderValues; import io.netty.handler.codec.http.HttpMessage; import io.netty.handler.codec.http.HttpObject; @@ -409,6 +410,10 @@ private void write413(ChannelHandlerContext ctx, boolean keepalive, FullHttpResp ctx.channel().close(); } }); + // fix https://github.com/esastack/esa-httpserver/issues/22 + // we must trigger this event to make sure HttpObjectDecoder#reset() is invoked. + // see more details from HttpObjectDecoder#userEventTriggered() + ctx.pipeline().fireUserEventTriggered(HttpExpectationFailedEvent.INSTANCE); } private void write417(ChannelHandlerContext ctx, boolean keepalive) { @@ -421,6 +426,10 @@ private void write417(ChannelHandlerContext ctx, boolean keepalive) { ctx.channel().close(); } }); + // fix https://github.com/esastack/esa-httpserver/issues/22 + // we must trigger this event to make sure HttpObjectDecoder#reset() is invoked. + // see more details from HttpObjectDecoder#userEventTriggered() + ctx.pipeline().fireUserEventTriggered(HttpExpectationFailedEvent.INSTANCE); } private void write400(ChannelHandlerContext ctx, DecoderResult msg) { diff --git a/httpserver/src/main/java/io/esastack/httpserver/impl/Http2Handler.java b/httpserver/src/main/java/io/esastack/httpserver/impl/Http2Handler.java index 13c369c..7e6cc87 100644 --- a/httpserver/src/main/java/io/esastack/httpserver/impl/Http2Handler.java +++ b/httpserver/src/main/java/io/esastack/httpserver/impl/Http2Handler.java @@ -422,6 +422,9 @@ private void write413(ChannelHandlerContext ctx, ctx.channel().close(); } }); + // release all resources corresponding current stream + stream.close(); + removeRequest(stream); } private void write417(ChannelHandlerContext ctx, @@ -447,5 +450,8 @@ private void write417(ChannelHandlerContext ctx, ctx.channel().close(); } }); + // release all resources corresponding current stream + stream.close(); + removeRequest(stream); } } diff --git a/httpserver/src/main/java/io/esastack/httpserver/impl/Http2HeadersImpl.java b/httpserver/src/main/java/io/esastack/httpserver/impl/Http2HeadersImpl.java index 4f2637a..014470f 100644 --- a/httpserver/src/main/java/io/esastack/httpserver/impl/Http2HeadersImpl.java +++ b/httpserver/src/main/java/io/esastack/httpserver/impl/Http2HeadersImpl.java @@ -27,8 +27,4 @@ final class Http2HeadersImpl extends Http2HeadersAdaptor { Http2HeadersImpl(Http2Headers headers) { super(headers); } - - Http2Headers unwrap() { - return underlying; - } } From 78360d0a820885d4921a4ba6b0d54b8f40e5498e Mon Sep 17 00:00:00 2001 From: Duan Wei Date: Fri, 26 Nov 2021 10:53:18 +0800 Subject: [PATCH 2/2] fix(#22) --- .../java/io/esastack/httpserver/impl/Http2Handler.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/httpserver/src/main/java/io/esastack/httpserver/impl/Http2Handler.java b/httpserver/src/main/java/io/esastack/httpserver/impl/Http2Handler.java index 7e6cc87..895224a 100644 --- a/httpserver/src/main/java/io/esastack/httpserver/impl/Http2Handler.java +++ b/httpserver/src/main/java/io/esastack/httpserver/impl/Http2Handler.java @@ -420,11 +420,10 @@ private void write413(ChannelHandlerContext ctx, stream.close(); } else if (isShutdown() && ctx.channel().isActive()) { ctx.channel().close(); + } else { + stream.close(); } }); - // release all resources corresponding current stream - stream.close(); - removeRequest(stream); } private void write417(ChannelHandlerContext ctx, @@ -448,10 +447,9 @@ private void write417(ChannelHandlerContext ctx, stream.close(); } else if (isShutdown() && ctx.channel().isActive()) { ctx.channel().close(); + } else { + stream.close(); } }); - // release all resources corresponding current stream - stream.close(); - removeRequest(stream); } }