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

Bug 346983

Summary: LogViewer still throws null argument exceptions
Product: [Eclipse Project] PDE Reporter: Marco Maccaferri <macca>
Component: UIAssignee: Taras Lungol <bulick>
Status: VERIFIED FIXED QA Contact:
Severity: normal    
Priority: P3 CC: bulick, curtis.windatt.public, remy.suen, Vikas.Chandra
Version: 3.6.2   
Target Milestone: 4.8 M7   
Hardware: PC   
OS: Windows XP   
See Also: https://git.eclipse.org/r/114792
https://git.eclipse.org/c/pde/eclipse.pde.ui.git/commit/?id=3c034de6a922487d58a9d01715159443a7898b88
Whiteboard:
Attachments:
Description Flags
stack1
none
stack2
none
scr3 none

Description Marco Maccaferri CLA 2011-05-24 09:35:20 EDT
Build Identifier: R-3.6.2-201102101200

I already reported this bug a while ago as bug 299786, unfortunately it wasn't fixed, our users are still getting it, sometimes randomly.

Here is our stack trace:

!ENTRY org.eclipse.ui 4 0 2011-05-23 05:30:49.316
!MESSAGE Unhandled event loop exception
!STACK 0
org.eclipse.swt.SWTException: Failed to execute runnable (org.eclipse.core.runtime.AssertionFailedException: null argument:)
 at org.eclipse.swt.SWT.error(SWT.java:4083)
 at org.eclipse.swt.SWT.error(SWT.java:3998)
 at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137)
 at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4041)
 at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3660)
 at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640)
 at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604)
 at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438)
 at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671)
 at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
 at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664)
 at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
 at com.rtrms.amoeba.internal.Application.run(Application.java:25)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
 at java.lang.reflect.Method.invoke(Unknown Source)
 at org.eclipse.equinox.internal.app.EclipseAppContainer.callMethodWithException(EclipseAppContainer.java:587)
 at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:198)
 at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
 at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
 at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
 at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
 at java.lang.reflect.Method.invoke(Unknown Source)
 at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620)
 at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575)
 at org.eclipse.equinox.launcher.Main.run(Main.java:1408)
 at org.eclipse.equinox.launcher.Main.main(Main.java:1384)
Caused by: org.eclipse.core.runtime.AssertionFailedException: null argument:
 at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:85)
 at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:73)
 at org.eclipse.jface.viewers.StructuredViewer.assertElementsNotNull(StructuredViewer.java:595)
 at org.eclipse.jface.viewers.StructuredViewer.getRawChildren(StructuredViewer.java:990)
 at org.eclipse.jface.viewers.ColumnViewer.getRawChildren(ColumnViewer.java:703)
 at org.eclipse.jface.viewers.AbstractTreeViewer.getRawChildren(AbstractTreeViewer.java:1332)
 at org.eclipse.jface.viewers.TreeViewer.getRawChildren(TreeViewer.java:391)
 at org.eclipse.jface.viewers.StructuredViewer.getFilteredChildren(StructuredViewer.java:896)
 at org.eclipse.jface.viewers.AbstractTreeViewer.getSortedChildren(AbstractTreeViewer.java:601)
 at org.eclipse.jface.viewers.AbstractTreeViewer.updateChildren(AbstractTreeViewer.java:2581)
 at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefreshStruct(AbstractTreeViewer.java:1867)
 at org.eclipse.jface.viewers.TreeViewer.internalRefreshStruct(TreeViewer.java:721)
 at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(AbstractTreeViewer.java:1842)
 at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(AbstractTreeViewer.java:1799)
 at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(AbstractTreeViewer.java:1785)
 at org.eclipse.jface.viewers.StructuredViewer$7.run(StructuredViewer.java:1487)
 at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1422)
 at org.eclipse.jface.viewers.TreeViewer.preservingSelection(TreeViewer.java:403)
 at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1383)
 at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1485)
 at org.eclipse.jface.viewers.ColumnViewer.refresh(ColumnViewer.java:537)
 at org.eclipse.ui.dialogs.FilteredTree$NotifyingTreeViewer.refresh(FilteredTree.java:1208)
 at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1444)
 at org.eclipse.ui.dialogs.FilteredTree$NotifyingTreeViewer.refresh(FilteredTree.java:1198)
 at org.eclipse.ui.internal.views.log.LogView$25.run(LogView.java:1067)
 at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
 at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134)
 ... 28 more

As the last comment on bug 299786 says, the problem seems to be caused by concurrent access to LogView.elements.

Please don't close this as duplicate of bug 271733 because it is not (clearly a completely different stack trace) and anyway it isn't fixed.

Reproducible: Sometimes
Comment 1 Remy Suen CLA 2011-06-02 14:41:23 EDT
Just got this on I20110601-2202, a 4.1 build.
Comment 2 Taras Lungol CLA 2017-10-23 07:16:29 EDT
Multiple users got the same exceptions:

org.eclipse.swt.SWTException: Failed to execute runnable (org.eclipse.core.runtime.AssertionFailedException: null argument:)
	at org.eclipse.swt.SWT.error(SWT.java:4533)
	at org.eclipse.swt.SWT.error(SWT.java:4448)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4528)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4146)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$4.run(PartRenderingEngine.java:1121)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1022)
	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:150)
	at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:687)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:604)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:148)
	at ...Application.start(Application.java:163)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:673)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:610)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1519)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1492)
Caused by: org.eclipse.core.runtime.AssertionFailedException: null argument:
	at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:85)
	at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:73)
	at org.eclipse.jface.viewers.StructuredViewer.assertElementsNotNull(StructuredViewer.java:586)
	at org.eclipse.jface.viewers.StructuredViewer.getRawChildren(StructuredViewer.java:1002)
	at org.eclipse.jface.viewers.ColumnViewer.getRawChildren(ColumnViewer.java:701)
	at org.eclipse.jface.viewers.AbstractTreeViewer.getRawChildren(AbstractTreeViewer.java:1349)
	at org.eclipse.jface.viewers.TreeViewer.getRawChildren(TreeViewer.java:341)
	at org.eclipse.jface.viewers.StructuredViewer.getFilteredChildren(StructuredViewer.java:907)
	at org.eclipse.jface.viewers.AbstractTreeViewer.getSortedChildren(AbstractTreeViewer.java:621)
	at org.eclipse.jface.viewers.AbstractTreeViewer.updateChildren(AbstractTreeViewer.java:2635)
	at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefreshStruct(AbstractTreeViewer.java:1913)
	at org.eclipse.jface.viewers.TreeViewer.internalRefreshStruct(TreeViewer.java:669)
	at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(AbstractTreeViewer.java:1888)
	at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(AbstractTreeViewer.java:1845)
	at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(AbstractTreeViewer.java:1831)
	at org.eclipse.jface.viewers.StructuredViewer.lambda$0(StructuredViewer.java:1519)
	at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1458)
	at org.eclipse.jface.viewers.TreeViewer.preservingSelection(TreeViewer.java:354)
	at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1419)
	at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1519)
	at org.eclipse.jface.viewers.ColumnViewer.refresh(ColumnViewer.java:523)
	at org.eclipse.ui.dialogs.FilteredTree$NotifyingTreeViewer.refresh(FilteredTree.java:1240)
	at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1478)
	at org.eclipse.ui.dialogs.FilteredTree$NotifyingTreeViewer.refresh(FilteredTree.java:1228)
	at org.eclipse.ui.internal.views.log.LogView$25.run(LogView.java:1105)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:182)
	... 24 more
Comment 3 Taras Lungol CLA 2017-12-28 06:30:32 EST
Created attachment 272062 [details]
stack1
Comment 4 Taras Lungol CLA 2017-12-28 06:31:07 EST
Created attachment 272063 [details]
stack2
Comment 5 Taras Lungol CLA 2017-12-28 06:31:50 EST
Created attachment 272064 [details]
scr3
Comment 6 Taras Lungol CLA 2017-12-28 06:35:56 EST
This problem caused by multithreding access to LogView. Write to log from one thread and refresh/read another thread. If limit of log entries enabled - possible situation when during limitation, element, that out of limit become NULL(please see scr3.jpg), but array size is not updeted yet - Meanwhile
other thread perform refresh of LogView and copy this array with oversize and has Nulled element.
Please see attached stacktraces: stack1 - log something; stack2 refresh LogView.


Solution: Synchronize methods that removes elements.
Comment 7 Taras Lungol CLA 2017-12-28 06:39:44 EST
Please see my solution https://git.eclipse.org/r/114792
Comment 9 Vikas Chandra CLA 2018-03-13 23:52:52 EDT
Thanks Taras. Please verify in March 14 build or later if this works for you.
Comment 10 Vikas Chandra CLA 2018-05-10 09:40:38 EDT
Difficult to verify as such.

Verified by code inspection.