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

Bug 300835

Summary: [Widgets] Getting view is busy logs while using Open Type
Product: [Eclipse Project] Platform Reporter: Paul Webster <pwebster>
Component: SWTAssignee: Platform-SWT-Inbox <platform-swt-inbox>
Status: CLOSED WORKSFORME QA Contact: Bogdan Gheorghe <gheorghe>
Severity: normal    
Priority: P3 CC: bokowski, ericwill, gheorghe, hsoliwal, pinnamur, Silenio_Quarti
Version: 3.6Keywords: triaged
Target Milestone: ---   
Hardware: PC   
OS: Linux   
Whiteboard:
Attachments:
Description Flags
Viewer warning log none

Description Paul Webster CLA 2010-01-26 10:32:51 EST
Created attachment 157267 [details]
Viewer warning log

While using open type I see logs like this occasionally, but twice this morning.  I've attached my log which has the same error on I20091208-0100 as well.

eclipse.buildId=I20100126-0100
java.fullversion=J2RE 1.5.0 IBM J9 2.3 Linux x86-32 j9vmxi3223-20080315 (JIT enabled)
J9VM - 20080314_17962_lHdSMr
JIT  - 20080130_0718ifx2_r8
GC   - 200802_08
BootLoader constants: OS=linux, ARCH=x86, WS=gtk, NL=en_US
Command-line arguments:  -os linux -ws gtk -arch x86 -data /opt/pwebster/workspaces/test360


Warning
Tue Jan 26 09:07:24 EST 2010
Ignored reentrant call while viewer is busy. This is only logged once per viewer instance, but similar calls will still be ignored.

java.lang.RuntimeException
at org.eclipse.jface.viewers.ColumnViewer.checkBusy(ColumnViewer.java:763)
at org.eclipse.jface.viewers.AbstractTableViewer.replace(AbstractTableViewer.java:1056)
at org.eclipse.ui.dialogs.FilteredItemsSelectionDialog$ContentProvider.updateElement(FilteredItemsSelectionDialog.java:2896)
at org.eclipse.jface.viewers.AbstractTableViewer$1.handleEvent(AbstractTableViewer.java:86)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1223)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1247)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1232)
at org.eclipse.swt.widgets.Table.checkData(Table.java:286)
at org.eclipse.swt.widgets.TableItem.getImage(TableItem.java:531)
at org.eclipse.jface.viewers.TableViewerRow.setImage(TableViewerRow.java:132)
at org.eclipse.jface.viewers.ViewerCell.setImage(ViewerCell.java:169)
at org.eclipse.ui.dialogs.FilteredItemsSelectionDialog$ItemsListLabelProvider.update(FilteredItemsSelectionDialog.java:1696)
at org.eclipse.jface.viewers.ViewerColumn.refresh(ViewerColumn.java:152)
at org.eclipse.jface.viewers.AbstractTableViewer.doUpdateItem(AbstractTableViewer.java:399)
at org.eclipse.jface.viewers.StructuredViewer$UpdateItemSafeRunnable.run(StructuredViewer.java:481)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:49)
at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175)
at org.eclipse.jface.viewers.StructuredViewer.refreshItem(StructuredViewer.java:1503)
at org.eclipse.jface.viewers.AbstractTableViewer.replace(AbstractTableViewer.java:1059)
at org.eclipse.ui.dialogs.FilteredItemsSelectionDialog$ContentProvider.updateElement(FilteredItemsSelectionDialog.java:2896)
at org.eclipse.jface.viewers.AbstractTableViewer.getVirtualSelection(AbstractTableViewer.java:510)
at org.eclipse.jface.viewers.AbstractTableViewer.getSelectionFromWidget(AbstractTableViewer.java:481)
at org.eclipse.jface.viewers.StructuredViewer.getSelection(StructuredViewer.java:994)
at org.eclipse.jface.viewers.StructuredViewer.handleSelect(StructuredViewer.java:1160)
at org.eclipse.jface.viewers.StructuredViewer$4.widgetSelected(StructuredViewer.java:1190)
at org.eclipse.jface.util.OpenStrategy.fireSelectionEvent(OpenStrategy.java:228)
at org.eclipse.jface.util.OpenStrategy.access$4(OpenStrategy.java:222)
at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:389)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1223)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1247)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1232)
at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1051)
at org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.refresh(FilteredItemsSelectionDialog.java:962)
at org.eclipse.ui.dialogs.FilteredItemsSelectionDialog$RefreshJob.runInUIThread(FilteredItemsSelectionDialog.java:1391)
at org.eclipse.ui.progress.UIJob$1.run(UIJob.java:95)
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3501)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3148)
at org.eclipse.jface.window.Window.runEventLoop(Window.java:825)
at org.eclipse.jface.window.Window.open(Window.java:801)
at org.eclipse.jdt.internal.ui.dialogs.FilteredTypesSelectionDialog.open(FilteredTypesSelectionDialog.java:500)
at org.eclipse.jdt.internal.ui.actions.OpenTypeAction.runWithEvent(OpenTypeAction.java:78)
at org.eclipse.jdt.internal.ui.actions.OpenTypeAction.runWithEvent(OpenTypeAction.java:160)
at org.eclipse.ui.internal.handlers.ActionDelegateHandlerProxy.execute(ActionDelegateHandlerProxy.java:281)
at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476)
at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508)
at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169)
at org.eclipse.ui.internal.keys.WorkbenchKeyboard.executeCommand(WorkbenchKeyboard.java:470)
at org.eclipse.ui.internal.keys.WorkbenchKeyboard.press(WorkbenchKeyboard.java:824)
at org.eclipse.ui.internal.keys.WorkbenchKeyboard.processKeyEvent(WorkbenchKeyboard.java:880)
at org.eclipse.ui.internal.keys.WorkbenchKeyboard.filterKeySequenceBindings(WorkbenchKeyboard.java:569)
at org.eclipse.ui.internal.keys.WorkbenchKeyboard.access$3(WorkbenchKeyboard.java:510)
at org.eclipse.ui.internal.keys.WorkbenchKeyboard$KeyDownFilter.handleEvent(WorkbenchKeyboard.java:125)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Display.filterEvent(Display.java:1520)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1222)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1247)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1232)
at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1259)
at org.eclipse.swt.widgets.Widget.gtk_key_press_event(Widget.java:720)
at org.eclipse.swt.widgets.Control.gtk_key_press_event(Control.java:2834)
at org.eclipse.swt.widgets.Composite.gtk_key_press_event(Composite.java:704)
at org.eclipse.swt.widgets.Widget.windowProc(Widget.java:1696)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:4606)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:4303)
at org.eclipse.swt.internal.gtk.OS._gtk_main_do_event(Native Method)
at org.eclipse.swt.internal.gtk.OS.gtk_main_do_event(OS.java:8051)
at org.eclipse.swt.widgets.Display.eventProc(Display.java:1238)
at org.eclipse.swt.internal.gtk.OS._g_main_context_iteration(Native Method)
at org.eclipse.swt.internal.gtk.OS.g_main_context_iteration(OS.java:2181)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3143)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2407)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2371)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2220)
at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194)
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:367)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:618)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:611)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:566)
at org.eclipse.equinox.launcher.Main.run(Main.java:1363)
Comment 1 Boris Bokowski CLA 2010-01-26 16:51:50 EST
Sending to SWT. This is happening in a virtual table. I believe the problem is caused by TableItem.setText(int, String) not always setting cached=true, for example if string.equals(text).

The reason for this causing a problem is that we make calls like this:

item.setText(potentiallyTheSameTextAsLastTime);
if (newImage != item.getImage()) {
  item.setImage(newImage);
}

And then the call to getImage() causing an unwanted SetData event.

Since there is no equivalent optimization for images in SWT (return early if the new image is the same as the old image), we need to use the pattern above to avoid performance degradation. I.e. we would not want to change the above to:

item.setText(potentiallyTheSameTextAsLastTime);
item.setImage(newImage);

in JFace.
Comment 2 Eric Williams CLA 2017-06-30 09:58:08 EDT
I cannot reproduce this issue.

Bug triaged, visit https://wiki.eclipse.org/SWT/Devel/Triage for more
inforamation.