Skip to content

Commit

Permalink
Ensure ChannelHandlerContext.isRemoved is called only when in event l…
Browse files Browse the repository at this point in the history
…oop (#3031)

Related to #2981
  • Loading branch information
violetagg authored Jan 18, 2024
1 parent 7910086 commit 14095e7
Showing 1 changed file with 7 additions and 4 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2021-2023 VMware, Inc. or its affiliates, All Rights Reserved.
* Copyright (c) 2021-2024 VMware, Inc. or its affiliates, All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -991,7 +991,8 @@ boolean goAwayReceived() {
@Nullable
ChannelHandlerContext http2FrameCodecCtx() {
ChannelHandlerContext ctx = http2FrameCodecCtx;
if (ctx != null && !ctx.isRemoved()) {
// ChannelHandlerContext.isRemoved is only meant to be called from within the EventLoop
if (ctx != null && connection.channel().eventLoop().inEventLoop() && !ctx.isRemoved()) {
return ctx;
}
ctx = connection.channel().pipeline().context(Http2FrameCodec.class);
Expand All @@ -1002,7 +1003,8 @@ ChannelHandlerContext http2FrameCodecCtx() {
@Nullable
ChannelHandlerContext http2MultiplexHandlerCtx() {
ChannelHandlerContext ctx = http2MultiplexHandlerCtx;
if (ctx != null && !ctx.isRemoved()) {
// ChannelHandlerContext.isRemoved is only meant to be called from within the EventLoop
if (ctx != null && connection.channel().eventLoop().inEventLoop() && !ctx.isRemoved()) {
return ctx;
}
ctx = connection.channel().pipeline().context(Http2MultiplexHandler.class);
Expand All @@ -1013,7 +1015,8 @@ ChannelHandlerContext http2MultiplexHandlerCtx() {
@Nullable
ChannelHandlerContext h2cUpgradeHandlerCtx() {
ChannelHandlerContext ctx = h2cUpgradeHandlerCtx;
if (ctx != null && !ctx.isRemoved()) {
// ChannelHandlerContext.isRemoved is only meant to be called from within the EventLoop
if (ctx != null && connection.channel().eventLoop().inEventLoop() && !ctx.isRemoved()) {
return ctx;
}
ctx = connection.channel().pipeline().context(NettyPipeline.H2CUpgradeHandler);
Expand Down

0 comments on commit 14095e7

Please sign in to comment.