[227567] Delete running server lock
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/DeleteServerDialog.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/DeleteServerDialog.java
index 472266f..43ec29d 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/DeleteServerDialog.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/DeleteServerDialog.java
@@ -144,46 +144,59 @@
final boolean deleteRunning = (checkDeleteRunning != null && checkDeleteRunning.getSelection());
final boolean deleteRunningStop = (checkDeleteRunningStop != null && checkDeleteRunningStop.getSelection());
- Job job = new Job(Messages.deleteServerTask) {
- protected IStatus run(IProgressMonitor monitor) {
+ Thread t = new Thread("Delete servers") {
+ public void run() {
if (runningServersList.size() > 0) {
// stop servers and/or updates servers' list
prepareForDeletion(deleteRunning, deleteRunningStop);
}
- if (servers.length == 0) {
- // all servers have been deleted from list
- return Status.OK_STATUS;
- }
- try {
- int size = servers.length;
- for (int i = 0; i < size; i++)
- servers[i].delete();
-
- if (checked) {
- size = configs.length;
- for (int i = 0; i < size; i++)
- configs[i].delete(true, true, monitor);
- }
- } catch (Exception e) {
- Trace.trace(Trace.SEVERE, "Error while deleting resources", e);
- return new Status(IStatus.ERROR, ServerUIPlugin.PLUGIN_ID, 0, e.getMessage(), e);
- }
+ Job job = new Job(Messages.deleteServerTask) {
+ protected IStatus run(IProgressMonitor monitor) {
+ if (servers.length == 0) {
+ // all servers have been deleted from list
+ return Status.OK_STATUS;
+ }
+ try {
+ if (monitor.isCanceled())
+ return Status.CANCEL_STATUS;
+
+ int size = servers.length;
+ for (int i = 0; i < size; i++)
+ servers[i].delete();
+
+ if (monitor.isCanceled())
+ return Status.CANCEL_STATUS;
+
+ if (checked) {
+ size = configs.length;
+ for (int i = 0; i < size; i++)
+ configs[i].delete(true, true, monitor);
+ }
+ } catch (Exception e) {
+ Trace.trace(Trace.SEVERE, "Error while deleting resources", e);
+ return new Status(IStatus.ERROR, ServerUIPlugin.PLUGIN_ID, 0, e.getMessage(), e);
+ }
- return Status.OK_STATUS;
+ return Status.OK_STATUS;
+ }
+ };
+
+ // set rule for workspace and servers
+ int size = servers.length;
+ ISchedulingRule[] rules = new ISchedulingRule[size+1];
+ for (int i = 0; i < size; i++)
+ rules[i] = new ServerSchedulingRule(servers[i]);
+ IResourceRuleFactory ruleFactory = ResourcesPlugin.getWorkspace().getRuleFactory();
+ rules[size] = ruleFactory.createRule(ResourcesPlugin.getWorkspace().getRoot());
+ job.setRule(MultiRule.combine(rules));
+ job.setPriority(Job.BUILD);
+
+ job.schedule();
}
};
-
- // set rule for workspace and servers
- int size = servers.length;
- ISchedulingRule[] rules = new ISchedulingRule[size+1];
- for (int i = 0; i < size; i++)
- rules[i] = new ServerSchedulingRule(servers[i]);
- IResourceRuleFactory ruleFactory = ResourcesPlugin.getWorkspace().getRuleFactory();
- rules[size] = ruleFactory.createRule(ResourcesPlugin.getWorkspace().getRoot());
- job.setRule(MultiRule.combine(rules));
-
- job.schedule();
+ t.setDaemon(true);
+ t.start();
}
super.buttonPressed(buttonId);
}
@@ -228,7 +241,7 @@
}
try {
while (expected != listener.getNumberStopped()) {
- Thread.sleep(100);
+ Thread.sleep(200);
}
} catch (InterruptedException e) {
Trace.trace(Trace.WARNING, "Interrupted while waiting for servers stop");