[#1654] Notify close future after the close was complete
This commit is contained in:
parent
cffbba94ee
commit
15279b2525
|
@ -515,38 +515,41 @@ public abstract class AbstractChannel extends DefaultAttributeMap implements Cha
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean wasActive = isActive();
|
if (closeFuture.isDone()) {
|
||||||
if (closeFuture.setClosed()) {
|
|
||||||
ChannelOutboundBuffer outboundBuffer = this.outboundBuffer;
|
|
||||||
this.outboundBuffer = null; // Disallow adding any messages and flushes to outboundBuffer.
|
|
||||||
|
|
||||||
try {
|
|
||||||
doClose();
|
|
||||||
promise.setSuccess();
|
|
||||||
} catch (Throwable t) {
|
|
||||||
promise.setFailure(t);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fail all the queued messages
|
|
||||||
try {
|
|
||||||
outboundBuffer.failFlushed(CLOSED_CHANNEL_EXCEPTION);
|
|
||||||
outboundBuffer.close(CLOSED_CHANNEL_EXCEPTION);
|
|
||||||
} finally {
|
|
||||||
|
|
||||||
if (wasActive && !isActive()) {
|
|
||||||
invokeLater(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
pipeline.fireChannelInactive();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
deregister(voidPromise());
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Closed already.
|
// Closed already.
|
||||||
promise.setSuccess();
|
promise.setSuccess();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean wasActive = isActive();
|
||||||
|
ChannelOutboundBuffer outboundBuffer = this.outboundBuffer;
|
||||||
|
this.outboundBuffer = null; // Disallow adding any messages and flushes to outboundBuffer.
|
||||||
|
|
||||||
|
try {
|
||||||
|
doClose();
|
||||||
|
closeFuture.setClosed();
|
||||||
|
promise.setSuccess();
|
||||||
|
} catch (Throwable t) {
|
||||||
|
closeFuture.setClosed();
|
||||||
|
promise.setFailure(t);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fail all the queued messages
|
||||||
|
try {
|
||||||
|
outboundBuffer.failFlushed(CLOSED_CHANNEL_EXCEPTION);
|
||||||
|
outboundBuffer.close(CLOSED_CHANNEL_EXCEPTION);
|
||||||
|
} finally {
|
||||||
|
|
||||||
|
if (wasActive && !isActive()) {
|
||||||
|
invokeLater(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
pipeline.fireChannelInactive();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
deregister(voidPromise());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user