views:

367

answers:

1

Hi,

I'm developing my own Eclipse plugin and came across a very strange behavior. In some very specific cases, Eclipse won't quit when I close the workbench. It just stays hanging until I kill the process. This happens when running through PDE and when running as a regular installation.

It is really hard to provide more details and I know that it is a very generic question. Yet, I was wondering if anyone encountered such behavior and could share the solution.

Thanks. Zviki

PS. I'm attaching stack traces of all the running threads after the workbench is quit. Maybe something will pop out. This trace was achieved by running the IDE in debug mode, suspending it after it got frozen and copying all the threads tree.

Test1 [Eclipse Application] 
org.eclipse.equinox.launcher.Main at localhost:54840 (Suspended) 
 Daemon System Thread [Finalizer] (Suspended) 
  Object.wait(long) line: not available [native method] 
  ReferenceQueue<T>.remove(long) line: 120 
  ReferenceQueue<T>.remove() line: 136 
  Finalizer$FinalizerThread.run() line: 159 
 Daemon System Thread [Reference Handler] (Suspended) 
  Object.wait(long) line: not available [native method] 
  Reference$Lock(Object).wait() line: 474 
  Reference$ReferenceHandler.run() line: 116 
 Thread [main] (Suspended) 
 Daemon System Thread [Signal Dispatcher] (Suspended) 
 Daemon Thread [Thread-0] (Suspended) 
  OS.CFRunLoopRunInMode(int, double, boolean) line: not available [native method] 
  Display.sleep() line: 3902 
  IDEWorkbenchAdvisor(WorkbenchAdvisor).eventLoopIdle(Display) line: 364 
  Workbench.runEventLoop(Window$IExceptionHandler, Display) line: 2383 
  Workbench.runUI() line: 2346 
  Workbench.access$4(Workbench) line: 2198 
  Workbench$5.run() line: 493 
  Realm.runWithDefault(Realm, Runnable) line: 288 
  Workbench.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 488 
  PlatformUI.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 149 
  IDEApplication.start(IApplicationContext) line: 113 
  EclipseAppHandle.run(Object) line: 193 
  EclipseAppLauncher.runApplication(Object) line: 110 
  EclipseAppLauncher.start(Object) line: 79 
  EclipseStarter.run(Object) line: 386 
  EclipseStarter.run(String[], Runnable) line: 179 
  NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method] 
  NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39 
  DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25 
  Method.invoke(Object, Object...) line: 585 
  Main.invokeFramework(String[], URL[]) line: 549 
  Main.basicRun(String[]) line: 504 
  Main.run(String[]) line: 1236 
  Main.main(String[]) line: 1212 
 Daemon Thread [State Data Manager] (Suspended) 
  Thread.sleep(long) line: not available [native method] 
  StateManager.run() line: 297 
  Thread.run() line: 613 
 Daemon Thread [Framework Event Dispatcher] (Suspended) 
  Object.wait(long) line: not available [native method] 
  EventManager$EventThread(Object).wait() line: 474 
  EventManager$EventThread.getNextEvent() line: 377 
  EventManager$EventThread.run() line: 317 
 Daemon Thread [Start Level Event Dispatcher] (Suspended) 
  Object.wait(long) line: not available [native method] 
  EventManager$EventThread(Object).wait() line: 474 
  EventManager$EventThread.getNextEvent() line: 377 
  EventManager$EventThread.run() line: 317 
 Thread [Worker-0] (Suspended) 
  Object.wait(long) line: not available [native method] 
  WorkerPool.sleep(long) line: 185 
  WorkerPool.startJob(Worker) line: 217 
  Worker.run() line: 51 
 Daemon Thread [Java indexing] (Suspended) 
  Object.wait(long) line: not available [native method] 
  IndexManager(Object).wait() line: 474 
  IndexManager(JobManager).run() line: 371 
  Thread.run() line: 613 
 Thread [Worker-1] (Suspended) 
  Object.wait(long) line: not available [native method] 
  WorkerPool.sleep(long) line: 185 
  WorkerPool.startJob(Worker) line: 217 
  Worker.run() line: 51 
 Thread [Worker-2] (Suspended) 
  Object.wait(long) line: not available [native method] 
  WorkerPool.sleep(long) line: 185 
  WorkerPool.startJob(Worker) line: 217 
  Worker.run() line: 51
+1  A: 

Sorry to bother everybody... got the problem.

My problem was simple: one of my Action Handlers threw an exception in the Dispose method. This causes the entire workspace to hang.

zvikico