Fix potential reentrance issue in ChannelOutboundBuffer
This commit is contained in:
parent
0bc7d3f5d1
commit
5e4169802f
|
@ -325,7 +325,6 @@ public final class ChannelOutboundBuffer {
|
||||||
flushed[head] = null;
|
flushed[head] = null;
|
||||||
|
|
||||||
ChannelPromise promise = flushedPromises[head];
|
ChannelPromise promise = flushedPromises[head];
|
||||||
promise.trySuccess();
|
|
||||||
flushedPromises[head] = null;
|
flushedPromises[head] = null;
|
||||||
|
|
||||||
int size = flushedPendingSizes[head];
|
int size = flushedPendingSizes[head];
|
||||||
|
@ -333,6 +332,7 @@ public final class ChannelOutboundBuffer {
|
||||||
|
|
||||||
this.head = head + 1 & flushed.length - 1;
|
this.head = head + 1 & flushed.length - 1;
|
||||||
|
|
||||||
|
promise.trySuccess();
|
||||||
decrementPendingOutboundBytes(size);
|
decrementPendingOutboundBytes(size);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -349,7 +349,7 @@ public final class ChannelOutboundBuffer {
|
||||||
safeRelease(msg);
|
safeRelease(msg);
|
||||||
flushed[head] = null;
|
flushed[head] = null;
|
||||||
|
|
||||||
safeFail(flushedPromises[head], cause);
|
ChannelPromise promise = flushedPromises[head];
|
||||||
flushedPromises[head] = null;
|
flushedPromises[head] = null;
|
||||||
|
|
||||||
int size = flushedPendingSizes[head];
|
int size = flushedPendingSizes[head];
|
||||||
|
@ -357,7 +357,9 @@ public final class ChannelOutboundBuffer {
|
||||||
|
|
||||||
this.head = head + 1 & flushed.length - 1;
|
this.head = head + 1 & flushed.length - 1;
|
||||||
|
|
||||||
|
safeFail(promise, cause);
|
||||||
decrementPendingOutboundBytes(size);
|
decrementPendingOutboundBytes(size);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user