From 4f00134cf989aa09a255b550b7fca0e3ef3d22f9 Mon Sep 17 00:00:00 2001 From: Roger Meier Date: Sun, 8 Dec 2013 20:59:51 +0100 Subject: [PATCH] THRIFT-2274 java: TNonblockingServer and TThreadedSelectorServer do not close their channel selectors on exit and leak file descriptors Patch: Thomas Kielbus --- .../org/apache/thrift/server/TNonblockingServer.java | 5 +++++ .../apache/thrift/server/TThreadedSelectorServer.java | 10 ++++++++++ 2 files changed, 15 insertions(+) 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(); } -- 2.17.1