remove AbstractChannel#doPreClose
This commit is contained in:
parent
fabefba791
commit
241f856cc7
@ -415,6 +415,7 @@ public abstract class AbstractChannel extends DefaultAttributeMap implements Cha
|
|||||||
"Force-closing a channel whose registration task was unaccepted by an event loop: {}",
|
"Force-closing a channel whose registration task was unaccepted by an event loop: {}",
|
||||||
AbstractChannel.this, t);
|
AbstractChannel.this, t);
|
||||||
closeForcibly();
|
closeForcibly();
|
||||||
|
closeFuture.setClosed();
|
||||||
promise.setFailure(t);
|
promise.setFailure(t);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -440,12 +441,12 @@ public abstract class AbstractChannel extends DefaultAttributeMap implements Cha
|
|||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
// Close the channel directly to avoid FD leak.
|
// Close the channel directly to avoid FD leak.
|
||||||
closeForcibly();
|
closeForcibly();
|
||||||
|
closeFuture.setClosed();
|
||||||
if (!promise.tryFailure(t)) {
|
if (!promise.tryFailure(t)) {
|
||||||
logger.warn(
|
logger.warn(
|
||||||
"Tried to fail the registration promise, but it is complete already. " +
|
"Tried to fail the registration promise, but it is complete already. " +
|
||||||
"Swallowing the cause of the registration failure:", t);
|
"Swallowing the cause of the registration failure:", t);
|
||||||
}
|
}
|
||||||
closeFuture.setClosed();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -514,13 +515,18 @@ public abstract class AbstractChannel extends DefaultAttributeMap implements Cha
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (closeFuture.isSuccess()) {
|
||||||
|
// Closed already.
|
||||||
|
promise.setSuccess();
|
||||||
|
}
|
||||||
|
|
||||||
boolean wasActive = isActive();
|
boolean wasActive = isActive();
|
||||||
if (closeFuture.setClosed()) {
|
|
||||||
ChannelOutboundBuffer outboundBuffer = this.outboundBuffer;
|
ChannelOutboundBuffer outboundBuffer = this.outboundBuffer;
|
||||||
this.outboundBuffer = null; // Disallow adding any messages and flushes to outboundBuffer.
|
this.outboundBuffer = null; // Disallow adding any messages and flushes to outboundBuffer.
|
||||||
|
|
||||||
try {
|
try {
|
||||||
doClose();
|
doClose();
|
||||||
|
closeFuture.setClosed();
|
||||||
promise.setSuccess();
|
promise.setSuccess();
|
||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
promise.setFailure(t);
|
promise.setFailure(t);
|
||||||
@ -543,10 +549,6 @@ public abstract class AbstractChannel extends DefaultAttributeMap implements Cha
|
|||||||
|
|
||||||
deregister(voidPromise());
|
deregister(voidPromise());
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
// Closed already.
|
|
||||||
promise.setSuccess();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -750,14 +752,6 @@ public abstract class AbstractChannel extends DefaultAttributeMap implements Cha
|
|||||||
*/
|
*/
|
||||||
protected abstract void doDisconnect() throws Exception;
|
protected abstract void doDisconnect() throws Exception;
|
||||||
|
|
||||||
/**
|
|
||||||
* Will be called before the actual close operation will be performed. Sub-classes may override this as the default
|
|
||||||
* is to do nothing.
|
|
||||||
*/
|
|
||||||
protected void doPreClose() throws Exception {
|
|
||||||
// NOOP by default
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Close the {@link Channel}
|
* Close the {@link Channel}
|
||||||
*/
|
*/
|
||||||
@ -834,11 +828,6 @@ public abstract class AbstractChannel extends DefaultAttributeMap implements Cha
|
|||||||
}
|
}
|
||||||
|
|
||||||
boolean setClosed() {
|
boolean setClosed() {
|
||||||
try {
|
|
||||||
doPreClose();
|
|
||||||
} catch (Exception e) {
|
|
||||||
logger.warn("doPreClose() raised an exception.", e);
|
|
||||||
}
|
|
||||||
return super.trySuccess();
|
return super.trySuccess();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -199,13 +199,12 @@ public class LocalChannel extends AbstractChannel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void doPreClose() throws Exception {
|
protected void doClose() throws Exception {
|
||||||
if (state > 2) {
|
if (state > 2) {
|
||||||
// Closed already
|
// Closed already
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update all internal state before the closeFuture is notified.
|
|
||||||
if (localAddress != null) {
|
if (localAddress != null) {
|
||||||
if (parent() == null) {
|
if (parent() == null) {
|
||||||
LocalChannelRegistry.unregister(localAddress);
|
LocalChannelRegistry.unregister(localAddress);
|
||||||
@ -213,10 +212,7 @@ public class LocalChannel extends AbstractChannel {
|
|||||||
localAddress = null;
|
localAddress = null;
|
||||||
}
|
}
|
||||||
state = 3;
|
state = 3;
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void doClose() throws Exception {
|
|
||||||
LocalChannel peer = this.peer;
|
LocalChannel peer = this.peer;
|
||||||
if (peer != null && peer.isActive()) {
|
if (peer != null && peer.isActive()) {
|
||||||
peer.unsafe().close(unsafe().voidPromise());
|
peer.unsafe().close(unsafe().voidPromise());
|
||||||
|
@ -94,23 +94,17 @@ public class LocalServerChannel extends AbstractServerChannel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void doPreClose() throws Exception {
|
protected void doClose() throws Exception {
|
||||||
if (state > 1) {
|
if (state > 1) {
|
||||||
// Closed already.
|
// Closed already.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update all internal state before the closeFuture is notified.
|
|
||||||
LocalChannelRegistry.unregister(localAddress);
|
LocalChannelRegistry.unregister(localAddress);
|
||||||
localAddress = null;
|
localAddress = null;
|
||||||
state = 2;
|
state = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void doClose() throws Exception {
|
|
||||||
// All internal state was updated already at doPreClose().
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Runnable doDeregister() throws Exception {
|
protected Runnable doDeregister() throws Exception {
|
||||||
((SingleThreadEventExecutor) eventLoop()).removeShutdownHook(shutdownHook);
|
((SingleThreadEventExecutor) eventLoop()).removeShutdownHook(shutdownHook);
|
||||||
|
Loading…
Reference in New Issue
Block a user