[377566] The server timeout timer begins at the incorrect time [377835] The JavaDoc and implementation isn't consistent for utility method ServerUtil.setRuntimeDefaultName() - Port to WTP 3.2.5 patches
diff --git a/features/org.eclipse.wst.server_core.feature.patch/buildnotes_org.eclipse.wst.server_core.feature.patch.html b/features/org.eclipse.wst.server_core.feature.patch/buildnotes_org.eclipse.wst.server_core.feature.patch.html index e9540d9..2766708 100644 --- a/features/org.eclipse.wst.server_core.feature.patch/buildnotes_org.eclipse.wst.server_core.feature.patch.html +++ b/features/org.eclipse.wst.server_core.feature.patch/buildnotes_org.eclipse.wst.server_core.feature.patch.html
@@ -17,6 +17,8 @@ <p>Bug <a href='https://bugs.eclipse.org/364482'>364482</a>. A race condition could occur in Server code</p> <p>Bug <a href='https://bugs.eclipse.org/370832'>370832</a>. Auto publish will not triggered for structure changes</p> <p>Bug <a href='https://bugs.eclipse.org/370992'>370992</a>. Extensible Server Start Jobs</p> +<p>Bug <a href='https://bugs.eclipse.org/377566'>377566</a>. The server timeout timer begins at the incorrect time</p> +<p>Bug <a href='https://bugs.eclipse.org/377835'>377835</a>. The JavaDoc and implementation isn't consistent for utility method ServerUtil.setRuntimeDefaultName() - Port to WTP 3.2.5 patches</p> </body></html> \ No newline at end of file
diff --git a/features/org.eclipse.wst.server_core.feature.patch/feature.properties b/features/org.eclipse.wst.server_core.feature.patch/feature.properties index ebad37a..3282694 100644 --- a/features/org.eclipse.wst.server_core.feature.patch/feature.properties +++ b/features/org.eclipse.wst.server_core.feature.patch/feature.properties
@@ -30,6 +30,8 @@ Bug https://bugs.eclipse.org/364482 A race condition could occur in Server code\n\ Bug https://bugs.eclipse.org/370832 Auto publish will not triggered for structure changes\n\ Bug https://bugs.eclipse.org/370992 Extensible Server Start Jobs\n\ +Bug https://bugs.eclipse.org/377566 The server timeout timer begins at the incorrect time\n\ +Bug https://bugs.eclipse.org/377835 The JavaDoc and implementation isn't consistent for utility method ServerUtil.setRuntimeDefaultName() - Port to WTP 3.2.5 patches\n\ \n\ # "copyright" property - text of the "Feature Update Copyright" copyright=\
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerUtil.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerUtil.java index 30bc068..8e243a0 100644 --- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerUtil.java +++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerUtil.java
@@ -1,5 +1,5 @@ /********************************************************************** - * Copyright (c) 2003, 2011 IBM Corporation and others. + * Copyright (c) 2003, 2012 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -394,7 +394,8 @@ * @param suffix * the numbering to start at for the suffix, if suffix is -1, then the no suffix name will be tried first. * @return the suffix it found no name conflicts at and is using as part of - * the default name + * the default name. If suffix passed in was -1 and the no suffix name + * does not conflict, the suffix returned is -1 */ public static int setRuntimeDefaultName(IRuntimeWorkingCopy runtime, int suffix) { String typeName = runtime.getRuntimeType().getName(); @@ -402,16 +403,26 @@ String name = null; if (suffix == -1) { name = NLS.bind(Messages.defaultRuntimeName, typeName); - // Start next suffix from 2 to preserve the original behaviour before this change. - suffix = 2; } else { name = NLS.bind(Messages.defaultRuntimeName2, new String[] { typeName, suffix + "" }); } - while (ServerPlugin.isNameInUse(runtime.getOriginal(), name)) { + if (ServerPlugin.isNameInUse(runtime.getOriginal(), name)){ + if (suffix == -1){ + // If the no suffix name is in use, the next suffix to try is 2 + suffix = 2; + } + else { + suffix++; + } + name = NLS.bind(Messages.defaultRuntimeName2, new String[] { typeName, suffix + "" }); - suffix++; + while (ServerPlugin.isNameInUse(runtime.getOriginal(), name)) { + suffix++; + name = NLS.bind(Messages.defaultRuntimeName2, new String[] { typeName, suffix + "" }); + } } + runtime.setName(name); return suffix; }
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Server.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Server.java index bfec066..1bdaf42 100644 --- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Server.java +++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Server.java
@@ -3290,8 +3290,6 @@ } } }; - thread.setDaemon(true); - thread.start(); if (Trace.FINEST) { Trace.trace(Trace.STRING_FINEST, "synchronousRestart 2"); @@ -3300,6 +3298,9 @@ // call the delegate restart try { getBehaviourDelegate(null).restart(launchMode); + + thread.setDaemon(true); + thread.start(); } catch (CoreException e) { removeServerListener(listener); timer.alreadyDone = true; @@ -3435,8 +3436,6 @@ } } }; - thread.setDaemon(true); - thread.start(); if (Trace.FINEST) { Trace.trace(Trace.STRING_FINEST, "synchronousStart 2"); @@ -3445,9 +3444,11 @@ // start the server try { startImpl2(launchMode, monitor); + + thread.setDaemon(true); + thread.start(); } catch (CoreException e) { removeServerListener(listener); - timer.alreadyDone = true; return e.getStatus(); } if (monitor.isCanceled()) { @@ -3561,11 +3562,23 @@ final Timer timer = new Timer(); final int serverTimeout = getStopTimeout() * 1000; + Thread thread = null; if (serverTimeout > 0) { - Thread thread = new Thread("Server Stop Timeout") { + thread = new Thread("Server Stop Timeout") { public void run() { - try { - Thread.sleep(serverTimeout); + try { + int totalTimeout = serverTimeout; + if (totalTimeout < 0) + totalTimeout = 1; + + int retryPeriod = 1000; + + while (totalTimeout > 0 && !timer.alreadyDone){ + Thread.sleep(retryPeriod); + if (serverTimeout > 0) + totalTimeout -= retryPeriod; + } + if (!timer.alreadyDone) { timer.timeout = true; // notify waiter @@ -3584,13 +3597,16 @@ } } }; - thread.setDaemon(true); - thread.start(); } // stop the server stopImpl2(force); + if (thread != null){ + thread.setDaemon(true); + thread.start(); + } + // wait for it! wait for it! synchronized (mutex) { try { @@ -3603,6 +3619,7 @@ "Error waiting for server stop", e); } } + timer.alreadyDone = true; } removeServerListener(listener);