Bug 366160 - [Table] Graphic is Disposed during Cell background color update
Summary: [Table] Graphic is Disposed during Cell background color update
Status: RESOLVED INVALID
Alias: None
Product: RAP
Classification: RT
Component: RWT (show other bugs)
Version: unspecified   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: Project Inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords: needinfo
Depends on:
Blocks:
 
Reported: 2011-12-09 04:46 EST by Avrajit Chatterjee CLA
Modified: 2011-12-12 04:40 EST (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 Avrajit Chatterjee CLA 2011-12-09 04:46:19 EST
Build Identifier: 

We are using 1.5M2 RAP release.
I am getting an error in my application sometimes when using Table and TableItems to update cell background color.

org.eclipse.swt.SWTException: Graphic is disposed
	org.eclipse.swt.SWT.error(SWT.java:3558)
	org.eclipse.swt.SWT.error(SWT.java:3481)
	org.eclipse.swt.SWT.error(SWT.java:3452)
	org.eclipse.swt.graphics.Color.getRGB(Color.java:191)
	org.eclipse.rwt.lifecycle.JSWriter.getColorValue(JSWriter.java:905)
	org.eclipse.rwt.lifecycle.JSWriter.createArray(JSWriter.java:874)
	org.eclipse.rwt.lifecycle.JSWriter.createParamList(JSWriter.java:845)
	org.eclipse.rwt.lifecycle.JSWriter.createParamList(JSWriter.java:806)
	org.eclipse.rwt.lifecycle.JSWriter.call(JSWriter.java:576)
	org.eclipse.rwt.lifecycle.JSWriter.set(JSWriter.java:328)
	org.eclipse.rwt.lifecycle.JSWriter.set(JSWriter.java:412)
	org.eclipse.swt.internal.widgets.tableitemkit.TableItemLCA.writeCellBackgrounds(TableItemLCA.java:238)
	org.eclipse.swt.internal.widgets.tableitemkit.TableItemLCA.writeChanges(TableItemLCA.java:144)
	org.eclipse.swt.internal.widgets.tableitemkit.TableItemLCA.access$2(TableItemLCA.java:138)
	org.eclipse.swt.internal.widgets.tableitemkit.TableItemLCA$1.run(TableItemLCA.java:106)
	org.eclipse.swt.internal.widgets.tableitemkit.TableItemLCA.preservingInitialized(TableItemLCA.java:425)
	org.eclipse.swt.internal.widgets.tableitemkit.TableItemLCA.renderChanges(TableItemLCA.java:99)
	org.eclipse.rwt.lifecycle.AbstractWidgetLCA.render(AbstractWidgetLCA.java:36)
	org.eclipse.swt.internal.widgets.displaykit.DisplayLCA$RenderVisitor.render(DisplayLCA.java:71)
	org.eclipse.swt.internal.widgets.displaykit.DisplayLCA$RenderVisitor.doVisit(DisplayLCA.java:55)
	org.eclipse.swt.internal.widgets.WidgetTreeVisitor$AllWidgetTreeVisitor.visit(WidgetTreeVisitor.java:30)
	org.eclipse.swt.internal.widgets.WidgetTreeVisitor.accept(WidgetTreeVisitor.java:66)
	org.eclipse.swt.internal.widgets.WidgetTreeVisitor.handleItems(WidgetTreeVisitor.java:114)
	org.eclipse.swt.internal.widgets.WidgetTreeVisitor.accept(WidgetTreeVisitor.java:52)
	org.eclipse.swt.internal.widgets.WidgetTreeVisitor.accept(WidgetTreeVisitor.java:55)
	org.eclipse.swt.internal.widgets.WidgetTreeVisitor.accept(WidgetTreeVisitor.java:55)
	org.eclipse.swt.internal.widgets.WidgetTreeVisitor.accept(WidgetTreeVisitor.java:55)
	org.eclipse.swt.internal.widgets.WidgetTreeVisitor.accept(WidgetTreeVisitor.java:55)
	org.eclipse.swt.internal.widgets.WidgetTreeVisitor.accept(WidgetTreeVisitor.java:55)
	org.eclipse.swt.internal.widgets.WidgetTreeVisitor.accept(WidgetTreeVisitor.java:55)
	org.eclipse.swt.internal.widgets.WidgetTreeVisitor.accept(WidgetTreeVisitor.java:55)
	org.eclipse.swt.internal.widgets.WidgetTreeVisitor.accept(WidgetTreeVisitor.java:55)
	org.eclipse.swt.internal.widgets.WidgetTreeVisitor.accept(WidgetTreeVisitor.java:55)
	org.eclipse.swt.internal.widgets.displaykit.DisplayLCA.renderShells(DisplayLCA.java:173)
	org.eclipse.swt.internal.widgets.displaykit.DisplayLCA.render(DisplayLCA.java:146)
	org.eclipse.rwt.internal.lifecycle.Render.execute(Render.java:29)
	org.eclipse.rwt.internal.lifecycle.RWTLifeCycle.continueLifeCycle(RWTLifeCycle.java:183)
	org.eclipse.rwt.internal.lifecycle.RWTLifeCycle.sleep(RWTLifeCycle.java:253)
	org.eclipse.swt.widgets.Display.sleep(Display.java:1174)
	org.eclipse.ui.application.WorkbenchAdvisor.eventLoopIdle(WorkbenchAdvisor.java:361)
	org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2734)
	org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2694)
	org.eclipse.ui.internal.Workbench.access$5(Workbench.java:2530)
	org.eclipse.ui.internal.Workbench$5.run(Workbench.java:702)
	org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:685)
	org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:157)


Reproducible: Sometimes

Steps to Reproduce:
1. Use Table 
2. Try to update the background color of cell on cell selection (say)
3. This error happens sometimes and not always.
Comment 1 Ivan Furnadjiev CLA 2011-12-09 05:07:02 EST
Avrajit, please provide a self-running snippet/project to reproduce the issue. Thanks.
Comment 2 Ivan Furnadjiev CLA 2011-12-09 05:10:07 EST
How/where did you create the Color used for cell background? Did you dispose this color somewhere after you set it as a cell background?
Comment 3 Avrajit Chatterjee CLA 2011-12-09 05:29:08 EST
(In reply to comment #2)
> How/where did you create the Color used for cell background? Did you dispose
> this color somewhere after you set it as a cell background?

Actually we keep a custom ColorRegistry singleton class which keeps a map of all the color objects shared between multiple sessions. So when some requires a color object we check if that has been disposed or not. If not then return and if disposed the create a new color object using the same RGB param and put it in the map and return.

Ours is a big code base and its a RCP to RAP migration project. Hence its very hard to find out if some one is disposing the colors after getting hold of them from the registry. But I feel it doesnt as this error does not come up always.
Comment 4 Ivan Furnadjiev CLA 2011-12-09 05:38:15 EST
For me it looks like the color object is disposed in one session while it is used in another. If this is the case, this is not a bug in RAP. There was a discussion about similar problem with disposed font (see Bug 321135). Disposing of a resource while it is in use is a programming error and is illegal in SWT.
Comment 5 Ivan Furnadjiev CLA 2011-12-12 04:40:24 EST
(In reply to comment #4)
> Disposing of a resource while it is in use is a programming error and is illegal in SWT.
I will close it as INVALID. Please reopen if you disagree and have a snippet to reproduce it.