Bug 95356 - StackOverflowError when disposing a Shell's parent in a dispose listener
Summary: StackOverflowError when disposing a Shell's parent in a dispose listener
Status: RESOLVED DUPLICATE of bug 4416
Alias: None
Product: Platform
Classification: Eclipse Project
Component: SWT (show other bugs)
Version: 3.1   Edit
Hardware: PC Windows 2000
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: Silenio Quarti CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2005-05-16 09:59 EDT by Grant Gayed CLA
Modified: 2005-08-11 19:17 EDT (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Grant Gayed CLA 2005-05-16 09:59:28 EDT
3.1M7

- run the snippet at the bottom and close its s3 shell, and you'll get the 
following:

java.lang.StackOverflowError
	at java.lang.Thread.currentThread(Native Method)
	at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:296)
	at org.eclipse.swt.widgets.Shell.getShells(Shell.java:728)
	at org.eclipse.swt.widgets.Shell.releaseShells(Shell.java:850)
	at org.eclipse.swt.widgets.Shell.releaseWidget(Shell.java:858)
	at org.eclipse.swt.widgets.Widget.releaseResources(Widget.java:719)
	at org.eclipse.swt.widgets.Shell.releaseShells(Shell.java:853)
	at org.eclipse.swt.widgets.Shell.releaseWidget(Shell.java:858)
	at org.eclipse.swt.widgets.Widget.dispose(Widget.java:380)
	at org.eclipse.swt.widgets.Decorations.dispose(Decorations.java:373)
	at org.eclipse.swt.widgets.Shell.dispose(Shell.java:491)
	at win32.Main$1.widgetDisposed(Main.java:23)
	at org.eclipse.swt.widgets.TypedListener.handleEvent
(TypedListener.java:100)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:842)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:866)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:847)
	at org.eclipse.swt.widgets.Widget.releaseWidget(Widget.java:754)
	at org.eclipse.swt.widgets.Control.releaseWidget(Control.java:1575)
	at org.eclipse.swt.widgets.Scrollable.releaseWidget(Scrollable.java:195)
	at org.eclipse.swt.widgets.Composite.releaseWidget(Composite.java:594)
	at org.eclipse.swt.widgets.Canvas.releaseWidget(Canvas.java:118)
	at org.eclipse.swt.widgets.Decorations.releaseWidget
(Decorations.java:714)
	at org.eclipse.swt.widgets.Shell.releaseWidget(Shell.java:859)
	at org.eclipse.swt.widgets.Widget.releaseResources(Widget.java:719)
	at org.eclipse.swt.widgets.Shell.releaseShells(Shell.java:853)
	at org.eclipse.swt.widgets.Shell.releaseWidget(Shell.java:858)
	at org.eclipse.swt.widgets.Widget.dispose(Widget.java:380)
	at org.eclipse.swt.widgets.Decorations.dispose(Decorations.java:373)
	at org.eclipse.swt.widgets.Shell.dispose(Shell.java:491)
	at win32.Main$1.widgetDisposed(Main.java:23)
	<snip the repeats>


snippet:

public static void main(String[] args) {
	final Display display = new Display();
	Shell s1 = new Shell(display);
	s1.setText("s1");
	s1.setBounds(10,10,100,100);
	final Shell s2 = new Shell(s1);
	s2.setText("s2");
	s2.setBounds(110,110,100,100);
	Shell s3 = new Shell(s2);
	s3.setText("s3");
	s3.setBounds(210,210,100,100);
	s1.open();
	s2.open();
	s3.open();
	s3.addDisposeListener(new DisposeListener() {
		public void widgetDisposed(DisposeEvent e) {
			s2.dispose();
		}
	});
	while (!s1.isDisposed()) {
		if (!display.readAndDispatch()) display.sleep();
	}
	display.dispose();
}
Comment 1 Silenio Quarti CLA 2005-08-11 19:17:16 EDT

*** This bug has been marked as a duplicate of 4416 ***