Bug 564464 - [GTK] Webkit.onDispose() calls getDisplay() on disposed browser for WebkitGTK
Summary: [GTK] Webkit.onDispose() calls getDisplay() on disposed browser for WebkitGTK
Status: RESOLVED FIXED
Alias: None
Product: Platform
Classification: Eclipse Project
Component: SWT (show other bugs)
Version: 4.15   Edit
Hardware: PC Linux
: P3 normal (vote)
Target Milestone: 4.17 M1   Edit
Assignee: Andreas Holtz CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2020-06-19 06:05 EDT by Andreas Holtz CLA
Modified: 2020-07-06 15:40 EDT (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Andreas Holtz CLA 2020-06-19 06:05:06 EDT
We are using a swt.browser.Browser-Object to display a tooltip.
Since Eclipse 4.15 we get a "swt.SWTException: Widget is disposed" when the tooltip hides.

Stacktrace:
org.eclipse.swt.SWTException: Widget is disposed
    at org.eclipse.swt.SWT.error(SWT.java:4723)
    at org.eclipse.swt.SWT.error(SWT.java:4638)
    at org.eclipse.swt.SWT.error(SWT.java:4609)
    at org.eclipse.swt.widgets.Widget.error(Widget.java:550)
    at org.eclipse.swt.widgets.Widget.getDisplay(Widget.java:636)
    at org.eclipse.swt.browser.WebKit.onDispose(WebKit.java:1956)
    at org.eclipse.swt.browser.WebKit.lambda$4(WebKit.java:858)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
    at org.eclipse.swt.widgets.Display.sendEvent(Display.java:5687)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1423)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1449)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1428)
    at org.eclipse.swt.widgets.Widget.release(Widget.java:1240)
    at org.eclipse.swt.widgets.Control.release(Control.java:4573)
    at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:1502)
    at org.eclipse.swt.widgets.Widget.release(Widget.java:1243)
    at org.eclipse.swt.widgets.Control.release(Control.java:4573)
    at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:1502)
    at org.eclipse.swt.widgets.Canvas.releaseChildren(Canvas.java:279)
    at org.eclipse.swt.widgets.Decorations.releaseChildren(Decorations.java:486)
    at org.eclipse.swt.widgets.Shell.releaseChildren(Shell.java:3208)
    at org.eclipse.swt.widgets.Widget.release(Widget.java:1243)
    at org.eclipse.swt.widgets.Control.release(Control.java:4573)
    at org.eclipse.swt.widgets.Widget.dispose(Widget.java:529)
    at org.eclipse.swt.widgets.Shell.dispose(Shell.java:3131)
    ...

I think the problem is in browser.WebKit.onDispose()
https://git.eclipse.org/r/plugins/gitiles/platform/eclipse.platform.swt/+/master/bundles/org.eclipse.swt/Eclipse%20SWT%20WebKit/gtk/org/eclipse/swt/browser/WebKit.java#1956

The method tries to get the display of a swt.Browser-object, but that object may already been disposed, see first comment in that method:
/* Browser could have been disposed by one of the Dispose listeners */
Calling browser.getDisplay() is calling Widget.getDisplay() which will throw an error in case of being already disposed, see
https://git.eclipse.org/r/plugins/gitiles/platform/eclipse.platform.swt/+/master/bundles/org.eclipse.swt/Eclipse%20SWT/gtk/org/eclipse/swt/widgets/Widget.java#634

As a result a lot of error messages are printed and written to the log.

I don't have a short example to reproduce, but I think the problem is obvious (which does not mean the solution is obvious).

PS: The current blog of WebKit.java is 6271e9ced774d1a7273005948e14e66c776c5900. Sorry, I don't know how to get a full link.
Comment 1 Andrey Loskutov CLA 2020-06-19 08:10:17 EDT
Andreas, thanks for report. Do you want to push a patch to Gerrit?
Comment 2 Eclipse Genie CLA 2020-06-23 09:42:35 EDT
New Gerrit change created: https://git.eclipse.org/r/165357
Comment 3 Andreas Holtz CLA 2020-06-23 09:46:17 EDT
Andrey, I pushed a patch to Gerrit.
Comment 5 Andrey Loskutov CLA 2020-07-06 15:40:48 EDT
Thanks Andreas. Merged for M1.