diff options
author | Dwayne Boone <dwayne@zeroc.com> | 2014-10-02 13:55:03 -0230 |
---|---|---|
committer | Dwayne Boone <dwayne@zeroc.com> | 2014-10-02 13:55:03 -0230 |
commit | 0217b84c777c7a6a3bff4efea52f23e704493d4b (patch) | |
tree | c305cffa9b6b39b81005b12e19321d35b5b6300e /java/src/Ice/ConnectionI.java | |
parent | Simplify Locator/Router finder usage in IceGridGUI (diff) | |
download | ice-0217b84c777c7a6a3bff4efea52f23e704493d4b.tar.bz2 ice-0217b84c777c7a6a3bff4efea52f23e704493d4b.tar.xz ice-0217b84c777c7a6a3bff4efea52f23e704493d4b.zip |
ICE-5585 call callback from ThreadPool if conneciton already closed
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 |