diff options
Diffstat (limited to 'java/src/IceInternal/ThreadPool.java')
-rw-r--r-- | java/src/IceInternal/ThreadPool.java | 39 |
1 files changed, 23 insertions, 16 deletions
diff --git a/java/src/IceInternal/ThreadPool.java b/java/src/IceInternal/ThreadPool.java index 724c261e23f..de46b6764cc 100644 --- a/java/src/IceInternal/ThreadPool.java +++ b/java/src/IceInternal/ThreadPool.java @@ -592,31 +592,38 @@ catch (RuntimeException ex) // ignore the event in this case. // BasicStream stream = new BasicStream(_instance); - if (handler.readable()) + try { - try + if (handler.readable()) { - if (!read(handler)) // No data available. + try { + if (!read(handler)) // No data available. + { //System.out.println("ThreadPool - no input"); + continue repeatSelect; + } + } + catch (Ice.TimeoutException ex) // Expected + { continue repeatSelect; } - } - catch (Ice.TimeoutException ex) // Expected - { - continue repeatSelect; - } - catch (Ice.LocalException ex) - { - handler.exception(ex); - continue repeatSelect; + catch (Ice.LocalException ex) + { + handler.exception(ex); + continue repeatSelect; + } + + stream.swap(handler._stream); + assert(stream.pos() == stream.size()); } - stream.swap(handler._stream); - assert(stream.pos() == stream.size()); + handler.message(stream); + } + finally + { + stream.destroy(); } - - handler.message(stream); break; } |