Skip to content
This repository has been archived by the owner on Apr 21, 2023. It is now read-only.

PluginImageHelper leaks images #1621

Closed
iloveeclipse opened this issue Jan 16, 2021 · 7 comments
Closed

PluginImageHelper leaks images #1621

iloveeclipse opened this issue Jan 16, 2021 · 7 comments
Assignees
Milestone

Comments

@iloveeclipse
Copy link

Regression from #432 : if PluginImageHelper can find a descriptor, it creates images without adding them to the registry & so without re-using them, causing permanent image leak:

org.eclipse.xtext.ui.PluginImageHelper.getImage(String)
	public Image getImage(String imageName) {
		final ImageDescriptor descriptor = findImage(imageName);
		if (descriptor != null) {
			return descriptor.createImage(); // The image is leaked here!
		}
@iloveeclipse
Copy link
Author

@cdietrich : FYI

@cdietrich
Copy link
Member

the parameter is

-Dorg.eclipse.swt.graphics.Resource.reportNonDisposed=true

@cdietrich
Copy link
Member

cdietrich commented Feb 5, 2021

i also saw, but cannot consistently reproduce. i also dont understand them.
would expect that org.eclipse.xtext.ui.PluginImageHelper.dispose()
would clean them up

java.lang.Error: SWT Resource was not properly disposed
	at org.eclipse.swt.graphics.Resource.initNonDisposeTracking(Resource.java:172)
	at org.eclipse.swt.graphics.Resource.<init>(Resource.java:120)
	at org.eclipse.swt.graphics.Image.<init>(Image.java:824)
	at org.eclipse.jface.resource.ImageDescriptor.createImage(ImageDescriptor.java:338)
	at org.eclipse.jface.resource.ImageDescriptor.createImage(ImageDescriptor.java:287)
	at org.eclipse.jface.resource.ImageDescriptor.createImage(ImageDescriptor.java:265)
	at org.eclipse.xtext.ui.PluginImageHelper.getImage(PluginImageHelper.java:87)
	at org.eclipse.xtext.ui.editor.XtextEditorErrorTickUpdater$1.run(XtextEditorErrorTickUpdater.java:148)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40)
	a
java.lang.Error: SWT Resource was not properly disposed
	at org.eclipse.swt.graphics.Resource.initNonDisposeTracking(Resource.java:172)
	at org.eclipse.swt.graphics.Resource.<init>(Resource.java:120)
	at org.eclipse.swt.graphics.Image.<init>(Image.java:771)
	at org.eclipse.jface.resource.URLImageDescriptor.createImage(URLImageDescriptor.java:274)
	at org.eclipse.jface.resource.ImageDescriptor.createImage(ImageDescriptor.java:287)
	at org.eclipse.jface.resource.ImageDescriptor.createImage(ImageDescriptor.java:265)
	at org.eclipse.xtext.ui.PluginImageHelper.getImage(PluginImageHelper.java:87)
	at org.eclipse.xtext.ui.label.AbstractLabelProvider.convertToImage(AbstractLabelProvider.java:96)
	at org.eclipse.xtext.ui.label.AbstractLabelProvider.getImage(AbstractLabelProvider.java:59)
	at org.eclipse.jface.viewers.WrappedViewerLabelProvider.getImage(WrappedViewerLabelProvider.java:104)
	at org.eclipse.jface.viewers.WrappedViewerLabelProvider.update(WrappedViewerLabelProvider.java:149)
	at org.eclipse.jface.viewers.ViewerColumn.refresh(ViewerColumn.java:144)
	at org.eclipse.jface.viewers.AbstractTreeViewer.doUpdateItem(AbstractTreeViewer.java:959)
	at org.eclipse.jface.viewers.AbstractTreeViewer$UpdateItemSafeRunnable.run(AbstractTreeViewer.java:126)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
	at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:174)
	at org.eclipse.jface.viewers.AbstractTreeViewer.doUpdateItem(AbstractTreeViewer.java:1037)
	at org.eclipse.jface.viewers.StructuredViewer$UpdateItemSafeRunnable.run(StructuredViewer.java:427)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
	at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:174)
	at org.eclipse.jface.viewers.StructuredViewer.updateItem(StructuredViewer.java:2111)
	at org.eclipse.jface.viewers.AbstractTreeViewer.createTreeItem(AbstractTreeViewer.java:853)
	at org.eclipse.jface.viewers.AbstractTreeViewer.createChildren(AbstractTreeViewer.java:831)
	at org.eclipse.jface.viewers.TreeViewer.createChildren(TreeViewer.java:604)
	at org.eclipse.jface.viewers.AbstractTreeViewer.createChildren(AbstractTreeViewer.java:779)
	at org.eclipse.jface.viewers.AbstractTreeViewer.internalInitializeTree(AbstractTreeViewer.java:1599)
	at org.eclipse.jface.viewers.TreeViewer.internalInitializeTree(TreeViewer.java:780)

and this one can be consistently reproduced.
wonder why we use the new here cc @miklossy

java.lang.Error: SWT Resource was not properly disposed
	at org.eclipse.swt.graphics.Resource.initNonDisposeTracking(Resource.java:172)
	at org.eclipse.swt.graphics.Resource.<init>(Resource.java:120)
	at org.eclipse.swt.graphics.Image.<init>(Image.java:771)
	at org.eclipse.jface.resource.URLImageDescriptor.createImage(URLImageDescriptor.java:274)
	at org.eclipse.jface.resource.ImageDescriptor.createImage(ImageDescriptor.java:287)
	at org.eclipse.jface.resource.ImageDescriptor.createImage(ImageDescriptor.java:265)
	at org.eclipse.xtext.ui.PluginImageHelper.getImage(PluginImageHelper.java:114)
	at org.eclipse.xtext.example.fowlerdsl.ui.wizard.MrsGrantsSecretCompartmentsProject.image(MrsGrantsSecretCompartmentsProject.java:103)
	at org.eclipse.xtext.example.fowlerdsl.ui.wizard.MrsGrantsSecretCompartmentsProject.getImages(MrsGrantsSecretCompartmentsProject.java:92)
	at org.eclipse.xtext.ui.wizard.template.NewProjectWizardTemplateSelectionPage.createControl(NewProjectWizardTemplateSelectionPage.java:93)

@cdietrich
Copy link
Member

@homebeaver buildship problems should be reported here https://github.com/eclipse/buildship/issues

@cdietrich
Copy link
Member

@miklossy can you answer the question about the new PluginImageHelper

@cdietrich
Copy link
Member

created #1690 for that

@cdietrich
Copy link
Member

Fixed in 2.26

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants