Bug 547623 - [GTK][Virtual Table] "Widget is disposed" on removing items from table
Summary: [GTK][Virtual Table] "Widget is disposed" on removing items from table
Status: NEW
Alias: None
Product: Platform
Classification: Eclipse Project
Component: SWT (show other bugs)
Version: 4.12   Edit
Hardware: PC Linux
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: Platform-SWT-Inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords: triaged
Depends on:
Blocks:
 
Reported: 2019-05-24 07:48 EDT by Andrey Loskutov CLA
Modified: 2021-06-02 18:14 EDT (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Andrey Loskutov CLA 2019-05-24 07:48:45 EDT
4.12 M3, GTK 3.22

Just got an "Unhandled event loop exception" on switching Git History to a different element. Probably regression from bug 544282 and reminds me on bug 182598 (but no crash this time).

Unfortunately not yet reproducible. Looks like the UI received event with *disposed* Item *while* GTK was removing table elements.

The  notable difference I see is that after commit 10358d0bb5c033e47e01415ae3070e4f7415aa53 we iterate  over the Table elements in opposite order and set iterator only once.

May be this order change causes some different GTK event order (or new GTK events) and we see now UI events sent with a *disposed* Items. I haven't debugged this yet, but I assume that sending events for already disposed widgets is unusual.

I assume the disposed Item is coming from Table.cellDataProc(long, long, long, long, long) callback - we find that item via GTK iterator in the Table items[] array and send it in an event via Table.checkData() to clients.

Clients do not like this :-)

org.eclipse.swt.SWTException: Widget is disposed
	at org.eclipse.swt.SWT.error(SWT.java:4699)
	at org.eclipse.swt.SWT.error(SWT.java:4614)
	at org.eclipse.swt.SWT.error(SWT.java:4585)
	at org.eclipse.swt.widgets.Widget.error(Widget.java:532)
	at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:469)
	at org.eclipse.swt.widgets.Widget.getData(Widget.java:558)
	at org.eclipse.jface.viewers.StructuredViewer.associate(StructuredViewer.java:564)
	at org.eclipse.jface.viewers.AbstractTableViewer$VirtualManager.lambda$0(AbstractTableViewer.java:101)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
	at org.eclipse.swt.widgets.Display.sendEvent(Display.java:5874)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1400)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1426)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1409)
	at org.eclipse.swt.widgets.Table.checkData(Table.java:283)
	at org.eclipse.swt.widgets.Table.cellDataProc(Table.java:221)
	at org.eclipse.swt.widgets.Display.cellDataProc(Display.java:913)
	at org.eclipse.swt.internal.gtk.GTK._gtk_list_store_remove(Native Method)
	at org.eclipse.swt.internal.gtk.GTK.gtk_list_store_remove(GTK.java:4054)
	at org.eclipse.swt.widgets.Table.remove(Table.java:2699)
	at org.eclipse.swt.widgets.Table.setItemCount(Table.java:3661)
	at org.eclipse.jface.viewers.TableViewer.doSetItemCount(TableViewer.java:231)
	at org.eclipse.jface.viewers.AbstractTableViewer.internalVirtualRefreshAll(AbstractTableViewer.java:643)
	at org.eclipse.jface.viewers.AbstractTableViewer.internalRefresh(AbstractTableViewer.java:617)
	at org.eclipse.jface.viewers.AbstractTableViewer.internalRefresh(AbstractTableViewer.java:607)
	at org.eclipse.jface.viewers.AbstractTableViewer.lambda$0(AbstractTableViewer.java:569)
	at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1391)
	at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1352)
	at org.eclipse.jface.viewers.AbstractTableViewer.inputChanged(AbstractTableViewer.java:569)
	at org.eclipse.jface.viewers.ContentViewer.setInput(ContentViewer.java:282)
	at org.eclipse.jface.viewers.StructuredViewer.setInput(StructuredViewer.java:1629)
	at org.eclipse.egit.ui.internal.history.CommitGraphTable.setInput(CommitGraphTable.java:432)
	at org.eclipse.egit.ui.internal.history.GitHistoryPage$13.run(GitHistoryPage.java:2210)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:5113)
Comment 1 Eric Williams CLA 2019-08-13 09:22:38 EDT
Do you still see this one Andrey?
Comment 2 Andrey Loskutov CLA 2019-08-13 10:24:34 EDT
(In reply to Eric Williams from comment #1)
> Do you still see this one Andrey?

Nope, never seen this again.