diff --git a/hawtdispatch-transport/src/main/java/org/fusesource/hawtdispatch/transport/TcpTransport.java b/hawtdispatch-transport/src/main/java/org/fusesource/hawtdispatch/transport/TcpTransport.java index 4c2933a..6e85fac 100644 --- a/hawtdispatch-transport/src/main/java/org/fusesource/hawtdispatch/transport/TcpTransport.java +++ b/hawtdispatch-transport/src/main/java/org/fusesource/hawtdispatch/transport/TcpTransport.java @@ -129,7 +129,8 @@ void add(Task onCompleted) { } void onCanceled() { trace("CANCELING.onCanceled"); - remaining--; + // it could be zero when neither readSource nor writeSource has been initialized yet + if (remaining > 0) remaining--; if( remaining!=0 ) { return; } @@ -463,6 +464,10 @@ public void run() { public void run() { // No need to complete if we have been canceled. if( ! socketState.is(CONNECTING.class) ) { + // fire onCanceled() for CANCELLING state. otherwise, it will never be triggered + if ( socketState.is(CANCELING.class)) { + socketState.onCanceled(); + } return; } try {