From: Roger Meier Date: Sun, 8 Dec 2013 19:59:51 +0000 (+0100) Subject: THRIFT-2274 java: TNonblockingServer and TThreadedSelectorServer do not close their... X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=4f00134cf989aa09a255b550b7fca0e3ef3d22f9;p=common%2Fthrift.git THRIFT-2274 java: TNonblockingServer and TThreadedSelectorServer do not close their channel selectors on exit and leak file descriptors Patch: Thomas Kielbus --- diff --git a/lib/java/src/org/apache/thrift/server/TNonblockingServer.java b/lib/java/src/org/apache/thrift/server/TNonblockingServer.java index a6e74769..3fc8672e 100644 --- a/lib/java/src/org/apache/thrift/server/TNonblockingServer.java +++ b/lib/java/src/org/apache/thrift/server/TNonblockingServer.java @@ -164,6 +164,11 @@ public class TNonblockingServer extends AbstractNonblockingServer { } catch (Throwable t) { LOGGER.error("run() exiting due to uncaught error", t); } finally { + try { + selector.close(); + } catch (IOException e) { + LOGGER.error("Got an IOException while closing selector!", e); + } stopped_ = true; } } diff --git a/lib/java/src/org/apache/thrift/server/TThreadedSelectorServer.java b/lib/java/src/org/apache/thrift/server/TThreadedSelectorServer.java index 8a68632d..7c5ec4f8 100644 --- a/lib/java/src/org/apache/thrift/server/TThreadedSelectorServer.java +++ b/lib/java/src/org/apache/thrift/server/TThreadedSelectorServer.java @@ -381,6 +381,11 @@ public class TThreadedSelectorServer extends AbstractNonblockingServer { } catch (Throwable t) { LOGGER.error("run() exiting due to uncaught error", t); } finally { + try { + acceptSelector.close(); + } catch (IOException e) { + LOGGER.error("Got an IOException while closing accept selector!", e); + } // This will wake up the selector threads TThreadedSelectorServer.this.stop(); } @@ -547,6 +552,11 @@ public class TThreadedSelectorServer extends AbstractNonblockingServer { } catch (Throwable t) { LOGGER.error("run() exiting due to uncaught error", t); } finally { + try { + selector.close(); + } catch (IOException e) { + LOGGER.error("Got an IOException while closing selector!", e); + } // This will wake up the accept thread and the other selector threads TThreadedSelectorServer.this.stop(); }