Cleaner shutdown + port unlocking for Linux.
git-svn-id: https://google-web-toolkit.googlecode.com/svn/releases/1.6@4303 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/shell/jetty/JettyLauncher.java b/dev/core/src/com/google/gwt/dev/shell/jetty/JettyLauncher.java
index cf1dcdb..d88f483 100644
--- a/dev/core/src/com/google/gwt/dev/shell/jetty/JettyLauncher.java
+++ b/dev/core/src/com/google/gwt/dev/shell/jetty/JettyLauncher.java
@@ -138,10 +138,12 @@
private final File appRootDir;
private final TreeLogger logger;
private final WebAppContext wac;
+ private final Server server;
- public JettyServletContainer(TreeLogger logger, WebAppContext wac,
- int actualPort, File appRootDir) {
+ public JettyServletContainer(TreeLogger logger, Server server,
+ WebAppContext wac, int actualPort, File appRootDir) {
this.logger = logger;
+ this.server = server;
this.wac = wac;
this.actualPort = actualPort;
this.appRootDir = appRootDir;
@@ -176,7 +178,8 @@
TreeLogger branch = logger.branch(TreeLogger.INFO,
"Stopping Jetty server");
try {
- wac.stop();
+ server.stop();
+ server.setStopAtShutdown(false);
} catch (Exception e) {
branch.log(TreeLogger.ERROR, "Unable to stop embedded Jetty server", e);
throw new UnableToCompleteException();
@@ -205,28 +208,31 @@
}
}
- Server server = new Server();
SelectChannelConnector connector = new SelectChannelConnector();
connector.setPort(port);
- connector.setHost("127.0.0.1");
- // Don't steal ports from an existing proc.
+
+ // Don't share ports with an existing process.
connector.setReuseAddress(false);
+ // Linux keeps the port blocked after shutdown if we don't disable this.
+ connector.setSoLingerTime(0);
+
+ Server server = new Server();
server.addConnector(connector);
// Create a new web app in the war directory.
WebAppContext wac = new WebAppContext(appRootDir.getAbsolutePath(), "/");
- // Prevent file locking on windows; pick up file changes.
+ // Prevent file locking on Windows; pick up file changes.
wac.getInitParams().put(
"org.mortbay.jetty.servlet.Default.useFileMappedBuffer", "false");
server.setHandler(wac);
- server.setStopAtShutdown(true);
server.start();
+ server.setStopAtShutdown(true);
- return new JettyServletContainer(logger, wac, connector.getLocalPort(),
- appRootDir);
+ return new JettyServletContainer(logger, server, wac,
+ connector.getLocalPort(), appRootDir);
}
private void checkStartParams(TreeLogger logger, int port, File appRootDir) {