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

Bug 328012

Summary: UI freezes when opening a launch configuration if the binary is on a slow file system
Product: [Tools] CDT Reporter: Sergey Prigogin <eclipse.sprigogin>
Component: cdt-debugAssignee: Sergey Prigogin <eclipse.sprigogin>
Status: RESOLVED FIXED QA Contact: Ken Ryall <ken.ryall>
Severity: normal    
Priority: P3 CC: cdtdoug, marc.khouzam, pawel.1.piech
Version: 7.0   
Target Milestone: 7.0.2   
Hardware: PC   
OS: Linux   
Whiteboard:

Description Sergey Prigogin CLA 2010-10-18 03:39:28 EDT
CAbstractMainTab.isBinary method gets called on the UI thread. This method may take long time if the file system where the binary is located is slow. 

"main" prio=10 tid=0x0831b000 nid=0x2cdc runnable [0xffea3000]
   java.lang.Thread.State: RUNNABLE
	at java.io.RandomAccessFile.readBytes(Native Method)
	at java.io.RandomAccessFile.read(RandomAccessFile.java:355)
	at java.io.RandomAccessFile.readFully(RandomAccessFile.java:414)
	at java.io.RandomAccessFile.readFully(RandomAccessFile.java:394)
	at org.eclipse.cdt.utils.elf.Elf$ELFhdr.<init>(Elf.java:170)
	at org.eclipse.cdt.utils.elf.Elf.commonSetup(Elf.java:688)
	at org.eclipse.cdt.utils.elf.Elf.<init>(Elf.java:706)
	at org.eclipse.cdt.utils.elf.Elf.getAttributes(Elf.java:942)
	at org.eclipse.cdt.utils.elf.parser.ElfParser.getBinary(ElfParser.java:58)
	at org.eclipse.cdt.utils.elf.parser.ElfParser.getBinary(ElfParser.java:33)
	at org.eclipse.cdt.launch.LaunchUtils.getBinary(LaunchUtils.java:87)
	at org.eclipse.cdt.launch.ui.CAbstractMainTab.isBinary(CAbstractMainTab.java:501)
	at org.eclipse.cdt.launch.ui.CMainTab.isValid(CMainTab.java:487)
	at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer.refresh(LaunchConfigurationTabGroupViewer.java:463)
	at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationsDialog.updateButtons(LaunchConfigurationsDialog.java:1520)
	at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationsDialog.refreshStatus(LaunchConfigurationsDialog.java:1229)
	at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer.refreshStatus(LaunchConfigurationTabGroupViewer.java:998)
	at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer$8.run(LaunchConfigurationTabGroupViewer.java:635)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
	at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer.inputChanged(LaunchConfigurationTabGroupViewer.java:640)
	at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer.setInput0(LaunchConfigurationTabGroupViewer.java:602)
	at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer.setInput(LaunchConfigurationTabGroupViewer.java:578)
	at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationsDialog.handleLaunchConfigurationSelectionChanged(LaunchConfigurationsDialog.java:940)
	at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationsDialog$3.selectionChanged(LaunchConfigurationsDialog.java:559)
	at org.eclipse.jface.viewers.StructuredViewer$3.run(StructuredViewer.java:867)
	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.firePostSelectionChanged(StructuredViewer.java:865)
	at org.eclipse.jface.viewers.StructuredViewer.setSelection(StructuredViewer.java:1700)
	at org.eclipse.jface.viewers.TreeViewer.setSelection(TreeViewer.java:1139)
	at org.eclipse.jface.viewers.Viewer.setSelection(Viewer.java:392)
	at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationsDialog.doInitialTreeSelection(LaunchConfigurationsDialog.java:599)
	at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationsDialog.initializeContent(LaunchConfigurationsDialog.java:1077)
	at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationsDialog.createContents(LaunchConfigurationsDialog.java:440)
	at org.eclipse.jface.window.Window.create(Window.java:431)
	at org.eclipse.jface.dialogs.Dialog.create(Dialog.java:1089)
	at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationsDialog.create(LaunchConfigurationsDialog.java:371)
	at org.eclipse.jface.window.Window.open(Window.java:790)
	at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationsDialog.open(LaunchConfigurationsDialog.java:1133)
	at org.eclipse.debug.ui.DebugUITools$1.run(DebugUITools.java:398)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
	at org.eclipse.debug.ui.DebugUITools.openLaunchConfigurationDialogOnGroup(DebugUITools.java:406)
	at org.eclipse.debug.ui.DebugUITools.openLaunchConfigurationDialogOnGroup(DebugUITools.java:340)
	at org.eclipse.debug.ui.actions.OpenLaunchDialogAction.run(OpenLaunchDialogAction.java:81)
	at org.eclipse.jface.action.Action.runWithEvent(Action.java:498)
	at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584)
	at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501)
	at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3540)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3161)
	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 org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	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 (C/C++) [Unknown frame (generated stub/JIT)]([Unknown source])
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:616)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:619)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:574)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1407)
Comment 1 Sergey Prigogin CLA 2010-11-28 15:51:02 EST
Fixed in cdt_7_0 and HEAD > 20101128.

Removed CAbstractMainTab.isBinary call from CMainTab.isValid.
Comment 2 CDT Genie CLA 2010-11-28 16:23:04 EST
*** cdt cvs genie on behalf of sprigogin ***
Bug 328012 - UI freezes when opening a launch configuration if the binary is on a slow file system

[*] CMainTab.java 1.85.2.2 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CMainTab.java?root=Tools_Project&r1=1.85.2.1&r2=1.85.2.2

[*] LaunchMessages.properties 1.38 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/all/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/LaunchMessages.properties?root=Tools_Project&r1=1.37&r2=1.38
[*] LaunchMessages.java 1.8 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/all/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/LaunchMessages.java?root=Tools_Project&r1=1.7&r2=1.8

[*] CMainTab.java 1.89 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/all/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CMainTab.java?root=Tools_Project&r1=1.88&r2=1.89
[*] CAbstractMainTab.java 1.6 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/all/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CAbstractMainTab.java?root=Tools_Project&r1=1.5&r2=1.6

[*] CMainTab.java 1.14 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/launching/CMainTab.java?root=Tools_Project&r1=1.13&r2=1.14

[*] CAbstractMainTab.java 1.7 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/all/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CAbstractMainTab.java?root=Tools_Project&r1=1.6&r2=1.7

[*] LaunchMessages.properties 1.8 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/launching/LaunchMessages.properties?root=Tools_Project&r1=1.7&r2=1.8

[*] CMainTab.java 1.12.2.1 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/launching/CMainTab.java?root=Tools_Project&r1=1.12&r2=1.12.2.1

[*] CAbstractMainTab.java 1.2.2.1 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CAbstractMainTab.java?root=Tools_Project&r1=1.2&r2=1.2.2.1
Comment 3 Marc Khouzam CLA 2010-11-29 11:04:36 EST
The

 * @noextend This class is not intended to be subclassed by clients.

added to 
org.eclipse.cdt.launch.ui.CMainTab broke the compilation for org.eclipse.cdt.debug.gdbjtag.ui.GDBJtagCDICMainTab

So I removed the line.
Comment 4 CDT Genie CLA 2010-11-29 11:23:03 EST
*** cdt cvs genie on behalf of mkhouzam ***
Bug 328012: Remote @noextend because it breaks the compilation of org.eclipse.cdt.debug.gdbjtag.ui.GDBJtagCDICMainTab

[*] CMainTab.java 1.90 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/all/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CMainTab.java?root=Tools_Project&r1=1.89&r2=1.90
Comment 5 CDT Genie CLA 2010-11-29 15:23:04 EST
*** cdt cvs genie on behalf of sprigogin ***
Bug 328012. Fixed an issue with file counting.

[*] AbstractIndexerTask.java 1.57 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/all/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/AbstractIndexerTask.java?root=Tools_Project&r1=1.56&r2=1.57