"SWTError: No more handles" error when repeatedly adding a new entry
--------------------------------------------------------------------

                 Key: DIRSTUDIO-288
                 URL: https://issues.apache.org/jira/browse/DIRSTUDIO-288
             Project: Directory Studio
          Issue Type: Bug
          Components: studio-ldapbrowser
    Affects Versions: 1.1.0
         Environment: Windows XP SP2 all current updates applied
Eclipse 3.3
JDK1.5.0_11 with a 512m heap size
Directory Studio 1.1.0
Open DS 1.0.0

            Reporter: John Buslawski
            Priority: Critical



When adding a new entry in Directory Studio, Eclipse sometimes will crash with 
a "SWTError: No more handles" error combined with either an OutOfMemoryError, 
an ArrayIndexOutOfBoundsException, or NegativeArraySizeException.  The 
following steps were used to reproduce the problem:

Connect via LDAP Browser to an LDAP server.
Expand out the tree and pick an group object. In our implementation it would 
look like > dc=initiatesystems,dc=com > ou=Groups > ou=System. Right-click on 
"cn=All Interactions" and select New Entry. ("All Interactions" is a group 
object.)
In the New Entry dialog select "Create from scratch", click Next.
On the page, move the object classes from the right side to the left side one 
at a time starting with "account" (the first one).
Once you have moved about 9 or 10 object classes to the left side, Eclipse will 
just shutdown with no warning.

The following was in the Eclipse .log file:

!ENTRY org.eclipse.ui 4 0 2008-03-03 16:22:22.806
!MESSAGE Unhandled event loop exception
!STACK 0
org.eclipse.swt.SWTError: No more handles
        at org.eclipse.swt.SWT.error(SWT.java:3589)
        at org.eclipse.swt.SWT.error(SWT.java:3481)
        at org.eclipse.swt.SWT.error(SWT.java:3452)
        at org.eclipse.swt.graphics.Image.init(Image.java:1811)
        at org.eclipse.swt.graphics.Image.init(Image.java:1936)
        at org.eclipse.swt.graphics.Image.<init>(Image.java:490)
        at 
org.eclipse.jface.resource.ImageDescriptor.createImage(ImageDescriptor.java:289)
        at 
org.eclipse.jface.resource.ImageDescriptor.createImage(ImageDescriptor.java:227)
        at 
org.eclipse.jface.resource.ImageDescriptor.createImage(ImageDescriptor.java:205)
        at 
org.apache.directory.studio.ldapbrowser.ui.wizards.NewEntryObjectclassWizardPage$1.getImage(Unknown
 Source)
        at 
org.eclipse.jface.viewers.WrappedViewerLabelProvider.getImage(WrappedViewerLabelProvider.java:117)
        at 
org.eclipse.jface.viewers.WrappedViewerLabelProvider.update(WrappedViewerLabelProvider.java:165)
        at org.eclipse.jface.viewers.ViewerColumn.refresh(ViewerColumn.java:135)
        at 
org.eclipse.jface.viewers.AbstractTableViewer.doUpdateItem(AbstractTableViewer.java:386)
        at 
org.eclipse.jface.viewers.StructuredViewer$UpdateItemSafeRunnable.run(StructuredViewer.java:466)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
        at org.eclipse.core.runtime.Platform.run(Platform.java:857)
        at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:46)
        at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:193)
        at 
org.eclipse.jface.viewers.StructuredViewer.updateItem(StructuredViewer.java:2026)
        at 
org.eclipse.jface.viewers.AbstractTableViewer.internalRefreshAll(AbstractTableViewer.java:692)
        at 
org.eclipse.jface.viewers.AbstractTableViewer.internalRefresh(AbstractTableViewer.java:630)
        at 
org.eclipse.jface.viewers.AbstractTableViewer.internalRefresh(AbstractTableViewer.java:617)
        at 
org.eclipse.jface.viewers.StructuredViewer$7.run(StructuredViewer.java:1433)
        at 
org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1368)
        at 
org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1330)
        at 
org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1431)
        at org.eclipse.jface.viewers.ColumnViewer.refresh(ColumnViewer.java:503)
        at 
org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1390)
        at 
org.apache.directory.studio.ldapbrowser.ui.wizards.NewEntryObjectclassWizardPage.add(Unknown
 Source)
        at 
org.apache.directory.studio.ldapbrowser.ui.wizards.NewEntryObjectclassWizardPage.access$200(Unknown
 Source)
        at 
org.apache.directory.studio.ldapbrowser.ui.wizards.NewEntryObjectclassWizardPage$7.widgetSelected(Unknown
 Source)
        at 
org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:227)
        at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:938)
        at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3682)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3293)
        at org.eclipse.jface.window.Window.runEventLoop(Window.java:820)
        at org.eclipse.jface.window.Window.open(Window.java:796)
        at 
org.apache.directory.studio.ldapbrowser.ui.actions.NewEntryAction.run(Unknown 
Source)
        at 
org.apache.directory.studio.ldapbrowser.common.actions.proxy.BrowserActionProxy.run(Unknown
 Source)
        at org.eclipse.jface.action.Action.runWithEvent(Action.java:498)
        at 
org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:545)
        at 
org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:490)
        at 
org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:402)
        at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:938)
        at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3682)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3293)
        at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2389)
        at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2353)
        at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2219)
        at org.eclipse.ui.internal.Workbench$4.run(Workbench.java:466)
        at 
org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:289)
        at 
org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:461)
        at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
        at 
org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:106)
        at 
org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:153)
        at 
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:106)
        at 
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:76)
        at 
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:363)
        at 
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:176)
        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:504)
        at org.eclipse.equinox.launcher.Main.basicRun(Main.java:443)
        at org.eclipse.equinox.launcher.Main.run(Main.java:1169)
        at org.eclipse.equinox.launcher.Main.main(Main.java:1144)

!ENTRY org.eclipse.ui 4 0 2008-03-03 16:23:21.728
!MESSAGE Unhandled event loop exception
!STACK 0
org.eclipse.swt.SWTException: Failed to execute runnable 
(java.lang.OutOfMemoryError: Java heap space)
        at org.eclipse.swt.SWT.error(SWT.java:3563)
        at org.eclipse.swt.SWT.error(SWT.java:3481)
        at 
org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:126)
        at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3659)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3296)
        at org.eclipse.jface.window.Window.runEventLoop(Window.java:820)
        at org.eclipse.jface.window.Window.open(Window.java:796)
        at 
org.apache.directory.studio.ldapbrowser.ui.actions.NewEntryAction.run(Unknown 
Source)
        at 
org.apache.directory.studio.ldapbrowser.common.actions.proxy.BrowserActionProxy.run(Unknown
 Source)
        at org.eclipse.jface.action.Action.runWithEvent(Action.java:498)
        at 
org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:545)
        at 
org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:490)
        at 
org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:402)
        at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:938)
        at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3682)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3293)
        at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2389)
        at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2353)
        at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2219)
        at org.eclipse.ui.internal.Workbench$4.run(Workbench.java:466)
        at 
org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:289)
        at 
org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:461)
        at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
        at 
org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:106)
        at 
org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:153)
        at 
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:106)
        at 
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:76)
        at 
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:363)
        at 
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:176)
        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:504)
        at org.eclipse.equinox.launcher.Main.basicRun(Main.java:443)
        at org.eclipse.equinox.launcher.Main.run(Main.java:1169)
        at org.eclipse.equinox.launcher.Main.main(Main.java:1144)
Caused by: java.lang.OutOfMemoryError: Java heap space


We think the error comes from using createImage() rather than getImage() in the 
getImage() method in the LabelProvider inner class of 
NewEntryObjectclassWizardPage. It appears as though the images keep getting 
recreated with freeing them. For example, the following line:

 BrowserUIPlugin.getDefault().getImageDescriptor( 
BrowserUIConstants.IMG_OCD_ABSTRACT ).createImage(); 

should be replaced with:
  
 BrowserUIPlugin.getDefault().getImage( BrowserUIConstants.IMG_OCD_ABSTRACT );



-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to