From 4329e6c6e8721d151cd236ac12d28a01f2b6db06 Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Thu, 17 May 2012 22:52:07 +0200 Subject: [PATCH] shutdown thread pool before exiting --- .../org/jetbrains/jps/cmdline/BuildMain.java | 18 ++++++++++++------ .../jetbrains/jps/cmdline/BuildSession.java | 3 +-- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildMain.java b/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildMain.java index 0c70cdb056ce..59582523d0a2 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildMain.java +++ b/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildMain.java @@ -29,6 +29,7 @@ import java.util.UUID; public class BuildMain { private static final String LOG_FILE_NAME = "log.xml"; private static final Logger LOG = Logger.getInstance("#org.jetbrains.jps.cmdline.BuildMain"); + private static NioClientSocketChannelFactory ourChannelFactory; public static void main(String[] args){ System.out.println("Build process started. Classpath: " + System.getProperty("java.class.path")); @@ -40,7 +41,8 @@ public class BuildMain { initLoggers(); - final ClientBootstrap bootstrap = new ClientBootstrap(new NioClientSocketChannelFactory(SharedThreadPool.INSTANCE, SharedThreadPool.INSTANCE, 1)); + ourChannelFactory = new NioClientSocketChannelFactory(SharedThreadPool.INSTANCE, SharedThreadPool.INSTANCE, 1); + final ClientBootstrap bootstrap = new ClientBootstrap(ourChannelFactory); bootstrap.setPipelineFactory(new ChannelPipelineFactory() { public ChannelPipeline getPipeline() throws Exception { return Channels.pipeline( @@ -143,12 +145,16 @@ public class BuildMain { super.channelClosed(ctx, e); } finally { - SharedThreadPool.INSTANCE.submit(new Runnable() { - @Override + new Thread("Shutdown thread") { public void run() { - System.exit(0); + try { + ourChannelFactory.releaseExternalResources(); + } + finally { + System.exit(0); + } } - }); + }.start(); } } @@ -167,7 +173,7 @@ public class BuildMain { SharedThreadPool.INSTANCE.submit(new Runnable() { @Override public void run() { - channel.close().awaitUninterruptibly(); + channel.close(); } }); } diff --git a/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildSession.java b/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildSession.java index fc1b17756ee8..2def671b7739 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildSession.java +++ b/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildSession.java @@ -439,8 +439,7 @@ final class BuildSession implements Runnable, CanceledStatus { SharedThreadPool.INSTANCE.submit(new Runnable() { @Override public void run() { - final ChannelFuture closeFuture = myChannel.close(); - closeFuture.awaitUninterruptibly(); + myChannel.close(); } }); }