| Summary: | Waiting for stalled shell pipe blocks the UI | ||
|---|---|---|---|
| Product: | [Technology] JGit | Reporter: | Nitin Dahyabhai <thatnitind> |
| Component: | JGit | Assignee: | Project Inbox <jgit.core-inbox> |
| Status: | CLOSED DUPLICATE | QA Contact: | |
| Severity: | normal | ||
| Priority: | P3 | CC: | remy.suen, robin.rosenberg |
| Version: | 0.11 | ||
| Target Milestone: | --- | ||
| Hardware: | PC | ||
| OS: | Windows XP | ||
| URL: | http://egit.eclipse.org/r/3193 | ||
| Whiteboard: | |||
*** This bug has been marked as a duplicate of bug 337533 *** (In reply to comment #1) > > *** This bug has been marked as a duplicate of bug 337533 *** But I have no intention of changing my PATH variable, and that patch didn't look like it was even attempting to resolve this problem. (In reply to comment #2) > (In reply to comment #1) > > > > *** This bug has been marked as a duplicate of bug 337533 *** > > But I have no intention of changing my PATH variable, and that patch didn't > look like it was even attempting to resolve this problem. You don't need to change PATH to use the workaround. The other bug is still open since the patch doesn't solve the problem, it merely allows a workaround. The problem with this hanging process is that none of the developers have been able to replicate it. You wrote "patch forthcoming"... Any idea why it hangs on your machine yet? (In reply to comment #3) > You wrote "patch forthcoming"... Any idea why it hangs on your machine yet? Only that it blocks reading from the child process (which I observed long ago when trying to do something similar with "aspell" on the command line as an alternate spell checker--it would randomly try to run a process and just block forever waiting for input). The patch is/was pushed to Gerrit, but not in the correct style and responded to some instruction to better reuse threading utlity classes already in the plug-in. Following that suggestion resulted in the deadlock reappearing, though, and I haven't had more time to spend on it to understand why the suggested solution didn't actually work for me. |
0.11.3 On my Windows XP system with Cygwin, but not git, installed, the shell executions buried in jGit's FS class and synchronized through GitProvider.getData() cause my UI to block on startup. Patch forthcoming. org.eclipse.equinox.launcher.Main at localhost:2418 (Suspended) Daemon System Thread [Attach Listener] (Suspended) Daemon System Thread [Signal Dispatcher] (Suspended) Daemon System Thread [Finalizer] (Suspended) Daemon System Thread [Reference Handler] (Suspended) Thread [main] (Suspended) waiting for: org.eclipse.egit.core.GitProvider (id=82) owned by: Thread [Worker-5] (Suspended) org.eclipse.egit.core.GitProvider.getData() line: 77 org.eclipse.egit.core.project.RepositoryMapping.getMapping(org.eclipse.core.resources.IResource) line: 224 org.eclipse.egit.ui.internal.actions.CommitActionHandler(org.eclipse.egit.ui.internal.actions.RepositoryActionHandler).getProjectsInRepositoryOfSelectedResources(org.eclipse.jface.viewers.IStructuredSelection) line: 158 org.eclipse.egit.ui.internal.actions.CommitActionHandler(org.eclipse.egit.ui.internal.actions.RepositoryActionHandler).getProjectsInRepositoryOfSelectedResources() line: 140 org.eclipse.egit.ui.internal.actions.CommitActionHandler.isEnabled() line: 37 org.eclipse.ui.internal.handlers.HandlerProxy.isEnabled() line: 320 org.eclipse.core.commands.Command.isEnabled() line: 833 org.eclipse.core.commands.Command.setHandler(org.eclipse.core.commands.IHandler) line: 996 org.eclipse.ui.internal.handlers.HandlerAuthority.updateCommand(java.lang.String, org.eclipse.ui.handlers.IHandlerActivation) line: 459 org.eclipse.ui.internal.handlers.HandlerAuthority.processChangedCommands() line: 638 org.eclipse.ui.internal.handlers.HandlerAuthority.access$1(org.eclipse.ui.internal.handlers.HandlerAuthority) line: 610 org.eclipse.ui.internal.handlers.HandlerAuthority$1.propertyChange(org.eclipse.jface.util.PropertyChangeEvent) line: 175 org.eclipse.ui.internal.services.EvaluationAuthority$1.run() line: 252 org.eclipse.core.runtime.SafeRunner.run(org.eclipse.core.runtime.ISafeRunnable) line: 42 org.eclipse.ui.internal.services.EvaluationAuthority.fireServiceChange(java.lang.String, java.lang.Object, java.lang.Object) line: 246 org.eclipse.ui.internal.services.EvaluationAuthority.endSourceChange(java.lang.String[]) line: 197 org.eclipse.ui.internal.services.EvaluationAuthority.sourceChanged(java.lang.String[]) line: 135 org.eclipse.ui.internal.services.EvaluationAuthority(org.eclipse.ui.internal.services.ExpressionAuthority).sourceChanged(int, java.lang.String[]) line: 311 org.eclipse.ui.internal.services.EvaluationAuthority(org.eclipse.ui.internal.services.ExpressionAuthority).sourceChanged(int, java.lang.String, java.lang.Object) line: 302 org.eclipse.ui.internal.services.WorkbenchSourceProvider(org.eclipse.ui.AbstractSourceProvider).fireSourceChanged(int, java.lang.String, java.lang.Object) line: 80 org.eclipse.ui.internal.services.WorkbenchSourceProvider.selectionChanged(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.ISelection) line: 177 org.eclipse.ui.internal.WindowSelectionService(org.eclipse.ui.internal.AbstractSelectionService).fireSelection(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.ISelection) line: 156 org.eclipse.ui.internal.AbstractSelectionService$1.selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent) line: 62 org.eclipse.jface.viewers.Viewer$2.run() line: 164 org.eclipse.core.runtime.SafeRunner.run(org.eclipse.core.runtime.ISafeRunnable) line: 42 org.eclipse.ui.internal.JFaceUtil$1.run(org.eclipse.core.runtime.ISafeRunnable) line: 49 org.eclipse.jface.util.SafeRunnable.run(org.eclipse.core.runtime.ISafeRunnable) line: 175 org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart$PackageExplorerProblemTreeViewer(org.eclipse.jface.viewers.Viewer).fireSelectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent) line: 162 org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart$PackageExplorerProblemTreeViewer(org.eclipse.jface.viewers.StructuredViewer).updateSelection(org.eclipse.jface.viewers.ISelection) line: 2188 org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart$PackageExplorerProblemTreeViewer(org.eclipse.jface.viewers.StructuredViewer).handleSelect(org.eclipse.swt.events.SelectionEvent) line: 1211 org.eclipse.jface.viewers.StructuredViewer$4.widgetSelected(org.eclipse.swt.events.SelectionEvent) line: 1241 org.eclipse.jface.util.OpenStrategy.fireSelectionEvent(org.eclipse.swt.events.SelectionEvent) line: 239 org.eclipse.jface.util.OpenStrategy.access$4(org.eclipse.jface.util.OpenStrategy, org.eclipse.swt.events.SelectionEvent) line: 233 org.eclipse.jface.util.OpenStrategy$1.handleEvent(org.eclipse.swt.widgets.Event) line: 403 org.eclipse.swt.widgets.EventTable.sendEvent(org.eclipse.swt.widgets.Event) line: 84 org.eclipse.swt.widgets.Tree(org.eclipse.swt.widgets.Widget).sendEvent(org.eclipse.swt.widgets.Event) line: 1053 org.eclipse.swt.widgets.Display.runDeferredEvents() line: 4163 org.eclipse.swt.widgets.Display.readAndDispatch() line: 3752 org.eclipse.ui.internal.Workbench.runEventLoop(org.eclipse.jface.window.Window$IExceptionHandler, org.eclipse.swt.widgets.Display) line: 2696 org.eclipse.ui.internal.Workbench.runUI() line: 2660 org.eclipse.ui.internal.Workbench.access$4(org.eclipse.ui.internal.Workbench) line: 2494 org.eclipse.ui.internal.Workbench$7.run() line: 674 org.eclipse.core.databinding.observable.Realm.runWithDefault(org.eclipse.core.databinding.observable.Realm, java.lang.Runnable) line: 332 org.eclipse.ui.internal.Workbench.createAndRunWorkbench(org.eclipse.swt.widgets.Display, org.eclipse.ui.application.WorkbenchAdvisor) line: 667 org.eclipse.ui.PlatformUI.createAndRunWorkbench(org.eclipse.swt.widgets.Display, org.eclipse.ui.application.WorkbenchAdvisor) line: 149 org.eclipse.ui.internal.ide.application.IDEApplication.start(org.eclipse.equinox.app.IApplicationContext) line: 123 org.eclipse.equinox.internal.app.EclipseAppHandle.run(java.lang.Object) line: 196 org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(java.lang.Object) line: 110 org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(java.lang.Object) line: 79 org.eclipse.core.runtime.adaptor.EclipseStarter.run(java.lang.Object) line: 344 org.eclipse.core.runtime.adaptor.EclipseStarter.run(java.lang.String[], java.lang.Runnable) line: 179 sun.reflect.NativeMethodAccessorImpl.invoke0(java.lang.reflect.Method, java.lang.Object, java.lang.Object[]) line: not available [native method] sun.reflect.NativeMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 39 sun.reflect.DelegatingMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 25 java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object...) line: 597 org.eclipse.equinox.launcher.Main.invokeFramework(java.lang.String[], java.net.URL[]) line: 622 org.eclipse.equinox.launcher.Main.basicRun(java.lang.String[]) line: 577 org.eclipse.equinox.launcher.Main.run(java.lang.String[]) line: 1410 org.eclipse.equinox.launcher.Main.main(java.lang.String[]) line: 1386 Thread [Framework Active Thread] (Suspended) Daemon Thread [Framework Event Dispatcher] (Suspended) Daemon Thread [Start Level Event Dispatcher] (Suspended) Daemon Thread [[Timer] - Main Queue Handler] (Suspended) Daemon Thread [[ThreadPool Manager] - Idle Thread] (Suspended) Thread [Worker-JM] (Suspended) Thread [Worker-0] (Suspended) Thread [Worker-1] (Suspended) Daemon Thread [Java indexing] (Suspended) Thread [Worker-3] (Suspended) Thread [Worker-2] (Suspended) Thread [Worker-4] (Suspended) Thread [Worker-5] (Suspended) owns: java.io.BufferedInputStream (id=72) owns: java.io.InputStreamReader (id=74) owns: org.eclipse.egit.core.RepositoryCache (id=80) waited by: Thread [Worker-3] (Suspended) owns: java.lang.Class<T> (org.eclipse.egit.core.project.GitProjectData) (id=62) owns: org.eclipse.egit.core.GitProvider (id=82) waited by: Thread [main] (Suspended) java.io.FileInputStream.readBytes(byte[], int, int) line: not available [native method] java.io.FileInputStream.read(byte[], int, int) line: 199 java.io.BufferedInputStream.read1(byte[], int, int) line: 256 java.io.BufferedInputStream.read(byte[], int, int) line: 317 sun.nio.cs.StreamDecoder.readBytes() line: 264 sun.nio.cs.StreamDecoder.implRead(char[], int, int) line: 306 sun.nio.cs.StreamDecoder.read(char[], int, int) line: 158 java.io.InputStreamReader.read(char[], int, int) line: 167 java.io.BufferedReader.fill() line: 136 java.io.BufferedReader.readLine(boolean) line: 299 java.io.BufferedReader.readLine() line: 362 {bash,--login,-c,which git} org.eclipse.jgit.util.FS.readPipe(java.io.File, java.lang.String[], java.lang.String) line: 272 org.eclipse.jgit.util.FS_Win32_Cygwin(org.eclipse.jgit.util.FS_Win32).discoverGitPrefix() line: 106 org.eclipse.jgit.util.FS_Win32_Cygwin(org.eclipse.jgit.util.FS).gitPrefix() line: 305 org.eclipse.jgit.util.SystemReader$1.openSystemConfig(org.eclipse.jgit.lib.Config, org.eclipse.jgit.util.FS) line: 77 org.eclipse.jgit.storage.file.FileRepository.<init>(org.eclipse.jgit.lib.BaseRepositoryBuilder) line: 157 org.eclipse.jgit.storage.file.FileRepository.<init>(java.io.File) line: 128 org.eclipse.egit.core.RepositoryCache.lookupRepository(java.io.File) line: 52 org.eclipse.egit.core.project.GitProjectData.map(org.eclipse.egit.core.project.RepositoryMapping) line: 471 org.eclipse.egit.core.project.GitProjectData.remapAll() line: 434 org.eclipse.egit.core.project.GitProjectData.load() line: 427 org.eclipse.egit.core.project.GitProjectData.get(org.eclipse.core.resources.IProject) line: 168 org.eclipse.egit.core.GitProvider.getData() line: 78 org.eclipse.egit.core.project.RepositoryMapping.getMapping(org.eclipse.core.resources.IResource) line: 224 org.eclipse.egit.ui.internal.decorators.GitLightweightDecorator.decorate(java.lang.Object, org.eclipse.jface.viewers.IDecoration) line: 229 org.eclipse.ui.internal.decorators.LightweightDecoratorDefinition.decorate(java.lang.Object, org.eclipse.jface.viewers.IDecoration) line: 263 org.eclipse.ui.internal.decorators.LightweightDecoratorManager$LightweightRunnable.run() line: 81 org.eclipse.core.runtime.SafeRunner.run(org.eclipse.core.runtime.ISafeRunnable) line: 42 org.eclipse.ui.internal.decorators.LightweightDecoratorManager.decorate(java.lang.Object, org.eclipse.ui.internal.decorators.DecorationBuilder, org.eclipse.ui.internal.decorators.LightweightDecoratorDefinition) line: 365 org.eclipse.ui.internal.decorators.LightweightDecoratorManager.getDecorations(java.lang.Object, org.eclipse.ui.internal.decorators.DecorationBuilder) line: 347 org.eclipse.ui.internal.decorators.DecorationScheduler$1.ensureResultCached(java.lang.Object, boolean, org.eclipse.jface.viewers.IDecorationContext) line: 370 org.eclipse.ui.internal.decorators.DecorationScheduler$1.run(org.eclipse.core.runtime.IProgressMonitor) line: 330 org.eclipse.core.internal.jobs.Worker.run() line: 54 Thread [Worker-6] (Suspended) waiting for: org.eclipse.core.internal.jobs.WorkerPool (id=51) java.lang.Object.wait(long) line: not available [native method] org.eclipse.core.internal.jobs.WorkerPool.sleep(long) line: 188 org.eclipse.core.internal.jobs.WorkerPool.startJob(org.eclipse.core.internal.jobs.Worker) line: 220 org.eclipse.core.internal.jobs.Worker.run() line: 50 D:\jdk6_20\bin\javaw.exe (Apr 19, 2011 5:02:05 PM)