Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 173049

Summary: [ErrorHandling] multiple stacked "Internal error" dialogs after OutOfMemoryError
Product: [Eclipse Project] Platform Reporter: Markus Keller <markus.kell.r>
Component: UIAssignee: Szymon Brandys <Szymon.Brandys>
Status: VERIFIED FIXED QA Contact:
Severity: major    
Priority: P1 CC: daniel_megert, Mike_Wilson, Tod_Creasey
Version: 3.3   
Target Milestone: 3.3 RC1   
Hardware: PC   
OS: Windows XP   
Whiteboard:
Attachments:
Description Flags
Screenshot
none
Fix proposal 01
none
Fix proposal 02
none
Example with many dialogs none

Description Markus Keller CLA 2007-02-06 08:45:44 EST
I20070206-0010

- launch Eclipse with:
java -showversion  -jar plugins\org.eclipse.equinox.launcher_*.jar -data oom -clean -consolelog -console -showlocation

- File > Import > Projects from CVS
- import org.eclipse.jdt.ui

=> 4 OutOfMemoryErrors in the log, 3 stacked "Internal error", see screenshot.


!ENTRY org.eclipse.core.jobs 4 2 2007-02-06 14:32:25.761
!MESSAGE An internal error occurred during: "Building workspace".
!STACK 0
java.lang.OutOfMemoryError: Java heap space

!ENTRY org.eclipse.ui 4 0 2007-02-06 14:32:25.761
!MESSAGE Unhandled event loop exception
!STACK 0
java.lang.OutOfMemoryError: Java heap space

!ENTRY org.eclipse.core.jobs 4 2 2007-02-06 14:32:52.462
!MESSAGE An internal error occurred during: "Building workspace".
!STACK 0
java.lang.OutOfMemoryError: Java heap space

!ENTRY org.eclipse.ui 4 0 2007-02-06 14:32:52.478
!MESSAGE Unhandled event loop exception
!STACK 0
java.lang.OutOfMemoryError: Java heap space
Comment 1 Markus Keller CLA 2007-02-06 08:48:07 EST
Created attachment 58336 [details]
Screenshot

What's worst is that the two frontmost dialogs overlap everything on the screen.
Comment 2 Markus Keller CLA 2007-04-23 09:45:27 EDT
I got this trace in I200760418-1012 before I got 5 nested "An internal error occurred while showing an internal error" dialogs (none of which was responsive). I had to kill the VM.

To avoid such situations, StatusNotificationManager and StatusHandler should preallocate all memory they need.

!ENTRY org.eclipse.ui 4 0 2007-04-23 15:22:39.156
!MESSAGE Unhandled event loop exception
!STACK 0
org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.OutOfMemoryError: Java heap space)
        at org.eclipse.swt.SWT.error(SWT.java:3534)
        at org.eclipse.swt.SWT.error(SWT.java:3457)
        at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:126)
        at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3650)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3287)
        at org.eclipse.jface.window.Window.runEventLoop(Window.java:820)
        at org.eclipse.jface.window.Window.open(Window.java:796)
        at org.eclipse.ui.internal.ide.dialogs.InternalErrorDialog.open(InternalErrorDialog.java:78)
        at org.eclipse.ui.internal.ide.dialogs.InternalErrorDialog.openQuestion(InternalErrorDialog.java:185)
        at org.eclipse.ui.internal.ide.IDEWorkbenchErrorHandler.openQuestionDialog(IDEWorkbenchErrorHandler.java:220)
        at org.eclipse.ui.internal.ide.IDEWorkbenchErrorHandler.handleException(IDEWorkbenchErrorHandler.java:142)
        at org.eclipse.ui.internal.ide.IDEWorkbenchErrorHandler$1.runInUIThread(IDEWorkbenchErrorHandler.java:90)
        at org.eclipse.ui.progress.UIJob$1.run(UIJob.java:94)
        at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
        at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:123)
        at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3650)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3287)
        at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2365)
        at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2329)
        at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2204)
        at org.eclipse.ui.internal.Workbench$4.run(Workbench.java:466)
        at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:289)
        at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:461)
        at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
        at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:101)
        at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:153)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:106)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:76)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:359)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:174)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:475)
        at org.eclipse.equinox.launcher.Main.basicRun(Main.java:415)
        at org.eclipse.equinox.launcher.Main.run(Main.java:1140)
        at org.eclipse.equinox.launcher.Main.main(Main.java:1115)
Caused by: java.lang.OutOfMemoryError: Java heap space
        at com.ibm.icu.impl.ICUResourceBundleReader.readData(ICUResourceBundleReader.java:247)
        at com.ibm.icu.impl.ICUResourceBundleReader.<init>(ICUResourceBundleReader.java:178)
        at com.ibm.icu.impl.ICUResourceBundleReader.getReader(ICUResourceBundleReader.java:195)
        at com.ibm.icu.impl.ICUResourceBundleImpl.createBundle(ICUResourceBundleImpl.java:49)
        at com.ibm.icu.impl.ICUResourceBundle.instantiateBundle(ICUResourceBundle.java:1195)
        at com.ibm.icu.impl.ICUResourceBundle.instantiateBundle(ICUResourceBundle.java:1234)
        at com.ibm.icu.impl.ICUResourceBundle.getBundleInstance(ICUResourceBundle.java:1163)
        at com.ibm.icu.util.UResourceBundle.instantiateBundle(UResourceBundle.java:485)
        at com.ibm.icu.util.UResourceBundle.getBundleInstance(UResourceBundle.java:123)
        at com.ibm.icu.util.UResourceBundle.getBundleInstance(UResourceBundle.java:105)
        at com.ibm.icu.util.UResourceBundle.getBundleInstance(UResourceBundle.java:186)
        at com.ibm.icu.impl.ZoneMeta.displayFallback(ZoneMeta.java:295)
        at com.ibm.icu.text.DateFormatSymbols.getDefaultZoneItemInfo(DateFormatSymbols.java:1276)
        at com.ibm.icu.text.DateFormatSymbols.getZoneString(DateFormatSymbols.java:1123)
        at com.ibm.icu.text.SimpleDateFormat.subFormat(SimpleDateFormat.java:852)
        at com.ibm.icu.text.SimpleDateFormat.format(SimpleDateFormat.java:576)
        at com.ibm.icu.text.DateFormat.format(DateFormat.java:466)
        at com.ibm.icu.text.DateFormat.format(DateFormat.java:477)
        at org.eclipse.ui.internal.statushandlers.StatusNotificationManager$StatusInfo.getDisplayString(StatusNotificationManager.java:216)
        at org.eclipse.ui.internal.statushandlers.StatusDialog.<init>(StatusDialog.java:103)
        at org.eclipse.ui.internal.statushandlers.StatusNotificationManager$2.runInUIThread(StatusNotificationManager.java:138)
        at org.eclipse.ui.progress.UIJob$1.run(UIJob.java:94)
        at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
        at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:123)
        at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3650)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3287)
        at org.eclipse.jface.window.Window.runEventLoop(Window.java:820)
        at org.eclipse.jface.window.Window.open(Window.java:796)
        at org.eclipse.ui.internal.ide.dialogs.InternalErrorDialog.open(InternalErrorDialog.java:78)
        at org.eclipse.ui.internal.ide.dialogs.InternalErrorDialog.openQuestion(InternalErrorDialog.java:185)
        at org.eclipse.ui.internal.ide.IDEWorkbenchErrorHandler.openQuestionDialog(IDEWorkbenchErrorHandler.java:220)
        at org.eclipse.ui.internal.ide.IDEWorkbenchErrorHandler.handleException(IDEWorkbenchErrorHandler.java:142)
Comment 3 Markus Keller CLA 2007-05-04 10:39:54 EDT
This must be fixed for 3.3.

OOMEs are bad, but these stacked error dialogs (that first make me hope for relief, but in the end always require me to kill the VM manually) destroy the last bit of confidence in the stability of the platform.
Comment 4 Szymon Brandys CLA 2007-05-04 19:23:24 EDT
It is marked for 3.3. Major is better severity anyway. 
If you want Markus to fix it faster, use priority.
Comment 5 Dani Megert CLA 2007-05-05 05:53:25 EDT
>If you want Markus to fix it faster, use priority.
Priority should only be set by those who schedule the(ir) work.
Comment 6 Szymon Brandys CLA 2007-05-05 06:32:03 EDT
> Priority should only be set by those who schedule the(ir) work.
Yep, you are right. Anyway I will try to fix it for RC1.

Comment 7 Dani Megert CLA 2007-05-07 04:45:19 EDT
See also bug 176153 which might be related.
Comment 8 Markus Keller CLA 2007-05-07 06:13:25 EDT
Steps to reproduce the complete hang in 3.3M7:

- Start new workspace with:
> java -showversion -jar plugins\org.eclipse.equinox.launcher_*.jar -data newWorkspace -clean -consolelog -console -showlocation

- File > Import > Plug-ins and Fragments, Projects with source folders, choose org.eclipse.jdt.ui

- In the first OutOfMemory dialog, click "No", in subsequent dialogs, try to click "Yes"

=> After a while, nothing moves any more, and the open dialogs don't react to clicks. Stackdump:

Full thread dump Java HotSpot(TM) Client VM (1.5.0_11-b03 mixed mode):

"Java indexing" daemon prio=4 tid=0x0ad7c478 nid=0x336c in Object.wait() [0x0ea8f000..0x0ea8fae8]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x036e8478> (a org.eclipse.jdt.internal.core.search.indexing.IndexManager)
        at java.lang.Object.wait(Object.java:474)
        at org.eclipse.jdt.internal.core.search.processing.JobManager.run(JobManager.java:369)
        - locked <0x036e8478> (a org.eclipse.jdt.internal.core.search.indexing.IndexManager)
        at java.lang.Thread.run(Thread.java:595)

"Worker-4" prio=6 tid=0x0aef9cd0 nid=0x3294 in Object.wait() [0x101af000..0x101afb68]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x034d0490> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:185)
        - locked <0x034d0490> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:217)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:51)

"Worker-1" prio=6 tid=0x0ac81c60 nid=0xc90 in Object.wait() [0x0ea0f000..0x0ea0f9e8]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x034d0490> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:185)
        - locked <0x034d0490> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:217)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:51)

"Start Level Event Dispatcher" daemon prio=6 tid=0x0af84bd8 nid=0x5ac4 in Object.wait() [0x0b38f000..0x0b38fc68]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x02fb9a58> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
        at java.lang.Object.wait(Object.java:474)
        at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:355)
        - locked <0x02fb9a58> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
        at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:293)

"OSGi Console" prio=6 tid=0x0af85230 nid=0x20bc runnable [0x0b30f000..0x0b30fd68]
        at java.io.FileOutputStream.writeBytes(Native Method)
        at java.io.FileOutputStream.write(FileOutputStream.java:260)
        at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
        at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
        - locked <0x02f13ce0> (a java.io.BufferedOutputStream)
        at java.io.PrintStream.write(PrintStream.java:383)
        - locked <0x02f03008> (a java.io.PrintStream)
        at java.io.FilterOutputStream.write(FilterOutputStream.java:60)
        at java.io.FilterOutputStream.write(FilterOutputStream.java:108)
        at sun.nio.cs.StreamEncoder$CharsetSE.writeBytes(StreamEncoder.java:336)
        at sun.nio.cs.StreamEncoder$CharsetSE.implFlushBuffer(StreamEncoder.java:404)
        at sun.nio.cs.StreamEncoder$CharsetSE.implFlush(StreamEncoder.java:408)
        at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:152)
        - locked <0x02f9b270> (a java.io.OutputStreamWriter)
        at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:213)
        at java.io.BufferedWriter.flush(BufferedWriter.java:236)
        - locked <0x02f9b270> (a java.io.OutputStreamWriter)
        at java.io.PrintWriter.flush(PrintWriter.java:270)
        - locked <0x02f98fb8> (a java.io.BufferedWriter)
        at org.eclipse.osgi.framework.internal.core.FrameworkConsole.console(FrameworkConsole.java:260)
        at org.eclipse.osgi.framework.internal.core.FrameworkConsole.run(FrameworkConsole.java:218)
        at java.lang.Thread.run(Thread.java:595)

"Framework Event Dispatcher" daemon prio=6 tid=0x0af2ce68 nid=0x3e4c in Object.wait() [0x0b2cf000..0x0b2cf9e8]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x02f97e30> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
        at java.lang.Object.wait(Object.java:474)
        at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:355)
        - locked <0x02f97e30> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
        at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:293)

"Low Memory Detector" daemon prio=6 tid=0x003455d8 nid=0x49c4 runnable [0x00000000..0x00000000]

"CompilerThread0" daemon prio=10 tid=0x00344308 nid=0x3018 waiting on condition [0x00000000..0x0abcf848]

"Signal Dispatcher" daemon prio=10 tid=0x003436a8 nid=0x6d94 waiting on condition [0x00000000..0x00000000]

"Finalizer" daemon prio=8 tid=0x0033a4d8 nid=0x5a1c in Object.wait() [0x0ab4f000..0x0ab4fc68]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x02ef6030> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116)
        - locked <0x02ef6030> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:132)
        at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)

"Reference Handler" daemon prio=10 tid=0x00339068 nid=0x5984 in Object.wait() [0x0ab0f000..0x0ab0fce8]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x02ef60b0> (a java.lang.ref.Reference$Lock)
        at java.lang.Object.wait(Object.java:474)
        at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
        - locked <0x02ef60b0> (a java.lang.ref.Reference$Lock)

"main" prio=6 tid=0x000364b0 nid=0x4a30 runnable [0x0007d000..0x0007fc40]
        at org.eclipse.swt.internal.win32.OS.MessageBoxW(Native Method)
        at org.eclipse.swt.internal.win32.OS.MessageBox(OS.java:2695)
        at org.eclipse.swt.widgets.MessageBox.open(MessageBox.java:191)
        at org.eclipse.ui.internal.ide.IDEWorkbenchErrorHandler.handleException(IDEWorkbenchErrorHandler.java:137)
        at org.eclipse.ui.internal.ide.IDEWorkbenchErrorHandler$1.runInUIThread(IDEWorkbenchErrorHandler.java:90)
        at org.eclipse.ui.progress.UIJob$1.run(UIJob.java:94)
        at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
        at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:123)
        - locked <0x043c0be0> (a org.eclipse.swt.widgets.RunnableLock)
        at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3650)
        at org.eclipse.swt.widgets.Display.msgFilterProc(Display.java:3032)
        at org.eclipse.swt.internal.win32.OS.MessageBoxW(Native Method)
        at org.eclipse.swt.internal.win32.OS.MessageBox(OS.java:2695)
        at org.eclipse.swt.widgets.MessageBox.open(MessageBox.java:191)
        at org.eclipse.ui.internal.ide.IDEWorkbenchErrorHandler.handleException(IDEWorkbenchErrorHandler.java:137)
        at org.eclipse.ui.internal.ide.IDEWorkbenchErrorHandler$1.runInUIThread(IDEWorkbenchErrorHandler.java:90)
        at org.eclipse.ui.progress.UIJob$1.run(UIJob.java:94)
        at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
        at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:123)
        - locked <0x0438ed50> (a org.eclipse.swt.widgets.RunnableLock)
        at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3650)
        at org.eclipse.swt.widgets.Display.msgFilterProc(Display.java:3032)
        at org.eclipse.swt.internal.win32.OS.MessageBoxW(Native Method)
        at org.eclipse.swt.internal.win32.OS.MessageBox(OS.java:2695)
        at org.eclipse.swt.widgets.MessageBox.open(MessageBox.java:191)
        at org.eclipse.ui.internal.ide.IDEWorkbenchErrorHandler.handleException(IDEWorkbenchErrorHandler.java:137)
        at org.eclipse.ui.internal.ide.IDEWorkbenchErrorHandler$1.runInUIThread(IDEWorkbenchErrorHandler.java:90)
        at org.eclipse.ui.progress.UIJob$1.run(UIJob.java:94)
        at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
        at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:123)
        - locked <0x0438d030> (a org.eclipse.swt.widgets.RunnableLock)
        at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3650)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3287)
        at org.eclipse.jface.window.Window.runEventLoop(Window.java:820)
        at org.eclipse.jface.window.Window.open(Window.java:796)
        at org.eclipse.ui.internal.ide.dialogs.InternalErrorDialog.open(InternalErrorDialog.java:78)
        at org.eclipse.ui.internal.ide.dialogs.InternalErrorDialog.openQuestion(InternalErrorDialog.java:185)
        at org.eclipse.ui.internal.ide.IDEWorkbenchErrorHandler.openQuestionDialog(IDEWorkbenchErrorHandler.java:220)
        at org.eclipse.ui.internal.ide.IDEWorkbenchErrorHandler.handleException(IDEWorkbenchErrorHandler.java:142)
        at org.eclipse.ui.internal.ide.IDEWorkbenchErrorHandler$1.runInUIThread(IDEWorkbenchErrorHandler.java:90)
        at org.eclipse.ui.progress.UIJob$1.run(UIJob.java:94)
        at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
        at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:123)
        - locked <0x04374368> (a org.eclipse.swt.widgets.RunnableLock)
        at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3650)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3287)
        at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2365)
        at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2329)
        at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2204)
        at org.eclipse.ui.internal.Workbench$4.run(Workbench.java:466)
        at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:289)
        at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:461)
        at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
        at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:106)
        at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:153)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:106)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:76)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:363)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:176)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:497)
        at org.eclipse.equinox.launcher.Main.basicRun(Main.java:436)
        at org.eclipse.equinox.launcher.Main.run(Main.java:1162)
        at org.eclipse.equinox.launcher.Main.main(Main.java:1137)

"VM Thread" prio=10 tid=0x003365a0 nid=0x13b8 runnable

"VM Periodic Task Thread" prio=10 tid=0x00346960 nid=0x6f8c waiting on condition
Comment 9 Szymon Brandys CLA 2007-05-16 11:19:52 EDT
Created attachment 67421 [details]
Fix proposal 01
Comment 10 Szymon Brandys CLA 2007-05-16 11:48:22 EDT
Created attachment 67430 [details]
Fix proposal 02
Comment 11 Szymon Brandys CLA 2007-05-16 12:15:25 EDT
1) try to recreate the exception from the comment 8

2) use the Test Bed 
- cause errors (NullPointer) in jobs (the error dialog will be opened)
- pass statuses to the facility (with SHOW style) (we will see these statuses in the opened dialog)
- cause at least one OOM exception (by running job with OOM or using Status Handling menu)

3)  cause couple OOM exceptions

4) Try SHMenu and "Throw OutOfMemory Action". It will throw OOM which is passed to the 
status handling facility with LOG style. 

In all cases we should see two dialogs. First is a regular error dialog with a list of errors.
The second is the fatal error dialog for closing the workbench.
Comment 12 Tod Creasey CLA 2007-05-16 13:35:16 EDT
Created attachment 67462 [details]
Example with many dialogs

+1 for the fix for 3.3 as it is better than what we had.

However here is an example that generates 10 OutOfMemory exceptions and still opens several dialogs. Given how late in the game this is I think we should look at this case for 3.3.1 or 3.4.

STEPS
1) Load a plug-in into your workspace
2) Select your manifest file
3) Popup New Submeny - > Out of Memory Test
Comment 13 Szymon Brandys CLA 2007-05-22 11:27:18 EDT
Yes. I can reproduce it, but it is not as harmful as before. As discussed it will be fixed in 3.3.1.
Comment 14 Markus Keller CLA 2007-05-22 11:37:02 EDT
With I20070517-1700, I had an OOME "by accident" and I provoked comment 8. In
both cases, the error was handled gracefully. I'm happy with the currently
released fix.
Comment 15 Szymon Brandys CLA 2007-05-22 11:51:21 EDT
Great :-) After discussion with Markus I decided to close this bug and open another one for the case Tod observed.
The new one is Bug 188351.