Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 346983 - LogViewer still throws null argument exceptions
Summary: LogViewer still throws null argument exceptions
Status: VERIFIED FIXED
Alias: None
Product: PDE
Classification: Eclipse Project
Component: UI (show other bugs)
Version: 3.6.2   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: 4.8 M7   Edit
Assignee: Taras Lungol CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-05-24 09:35 EDT by Marco Maccaferri CLA
Modified: 2018-05-10 09:40 EDT (History)
4 users (show)

See Also:


Attachments
stack1 (120.79 KB, image/jpeg)
2017-12-28 06:30 EST, Taras Lungol CLA
no flags Details
stack2 (155.30 KB, image/jpeg)
2017-12-28 06:31 EST, Taras Lungol CLA
no flags Details
scr3 (23.59 KB, image/jpeg)
2017-12-28 06:31 EST, Taras Lungol CLA
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
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.