diff options
Diffstat (limited to 'java/src/Ice/ConnectionI.java')
-rw-r--r-- | java/src/Ice/ConnectionI.java | 39 |
1 files changed, 24 insertions, 15 deletions
diff --git a/java/src/Ice/ConnectionI.java b/java/src/Ice/ConnectionI.java index 979a76f3531..fe26e8c1104 100644 --- a/java/src/Ice/ConnectionI.java +++ b/java/src/Ice/ConnectionI.java @@ -720,32 +720,41 @@ public final class ConnectionI extends IceInternal.EventHandler implements Conne } @Override - synchronized public void setCallback(ConnectionCallback callback) + synchronized public void setCallback(final ConnectionCallback callback) { - boolean closed = false; synchronized(this) { if(_state >= StateClosed) { - closed = true; + if(callback != null) + { + class CallbackWorkItem extends IceInternal.DispatchWorkItem + { + public CallbackWorkItem() + { + } + + @Override + public void run() + { + try + { + callback.closed(ConnectionI.this); + } + catch(Exception ex) + { + _logger.error("connection callback exception:\n" + ex + '\n' + _desc); + } + } + }; + _threadPool.dispatch(new CallbackWorkItem()); + } } else { _callback = callback; } } - - if(closed && callback != null) - { - try - { - callback.closed(this); - } - catch(Exception ex) - { - _logger.error("connection callback exception:\n" + ex + '\n' + _desc); - } - } } @Override |