Bug 506090: log full stack traces via exception objects
Change-Id: I859b1adf22eb3a9c9a86a16cd6e22ef24b1b525e
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/UILockListener.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/UILockListener.java
index 018c734..57d4223 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/UILockListener.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/UILockListener.java
@@ -201,8 +201,7 @@
String msg = "To avoid deadlock while executing Display.syncExec() with argument: " //$NON-NLS-1$
+ runnable + ", thread " + nonUiThread.getName() //$NON-NLS-1$
+ " will interrupt UI thread."; //$NON-NLS-1$
- MultiStatus main = new MultiStatus(WorkbenchPlugin.PI_WORKBENCH, IStatus.ERROR, msg,
- new IllegalStateException());
+ MultiStatus main = new MultiStatus(WorkbenchPlugin.PI_WORKBENCH, IStatus.ERROR, msg, null);
ThreadInfo[] threads = ManagementFactory.getThreadMXBean().getThreadInfo(new long[] { nonUiThread.getId(), display.getThread().getId() }, true, true);
@@ -214,8 +213,9 @@
} else {
childMsg = "UI thread waiting on a job or lock."; //$NON-NLS-1$
}
- childMsg += " Stack: \n" + info.toString(); //$NON-NLS-1$
- Status child = new Status(IStatus.ERROR, WorkbenchPlugin.PI_WORKBENCH, IStatus.ERROR, childMsg, null);
+ Exception childEx = new IllegalStateException("Call stack for thread " + info.getThreadName()); //$NON-NLS-1$
+ childEx.setStackTrace(info.getStackTrace());
+ Status child = new Status(IStatus.ERROR, WorkbenchPlugin.PI_WORKBENCH, IStatus.ERROR, childMsg, childEx);
main.add(child);
}