Summary: | deadlock between auto-build/refresh right after startup | ||||||||
---|---|---|---|---|---|---|---|---|---|
Product: | [Eclipse Project] JDT | Reporter: | Rafael Chaves <eclipse> | ||||||
Component: | Core | Assignee: | Kent Johnson <kent_johnson> | ||||||
Status: | VERIFIED FIXED | QA Contact: | |||||||
Severity: | normal | ||||||||
Priority: | P3 | CC: | frederic_fusier, john.arthorne, Olivier_Thomann | ||||||
Version: | 3.4 | ||||||||
Target Milestone: | 3.4.1 | ||||||||
Hardware: | PC | ||||||||
OS: | Windows Vista | ||||||||
Whiteboard: | |||||||||
Attachments: |
|
Description
Rafael Chaves
2008-06-16 23:50:37 EDT
Created attachment 105125 [details]
thread dump
The two refresh threads are waiting on the build, and the build seems to be stuck in a loop in ReadManager.getContents in the compiler. I'm not sure if this is the cause, but it looks like if ReadManager#run has a runtime exception or error, it could leave the caller of ReadManager.getContents stuck in an infinite loop because it's waiting on a read that will never complete. Moving to JDT core for further analysis. Created attachment 105175 [details]
Proposed patch
I also be stuck while building one of my workspace, it was after a refresh but which was finished since a while... 2008-07-10 16:37:49 Full thread dump Java HotSpot(TM) Client VM (10.0-b19 mixed mode): "Worker-30" prio=6 tid=0x1d6b5c00 nid=0x1630 in Object.wait() [0x20f5f000..0x20f5fd14] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:185) - locked <0x0423af10> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:217) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:51) "Worker-28" prio=6 tid=0x1d730400 nid=0x56c in Object.wait() [0x2108f000..0x2108fa14] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) at org.eclipse.core.internal.jobs.ThreadJob.joinRun(ThreadJob.java:189) - locked <0x0475baf0> (a java.lang.Object) at org.eclipse.core.internal.jobs.ImplicitJobs.begin(ImplicitJobs.java:87) at org.eclipse.core.internal.jobs.JobManager.beginRule(JobManager.java:230) at org.eclipse.core.internal.utils.StringPoolJob.run(StringPoolJob.java:99) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55) "Worker-26" prio=6 tid=0x1d6fd400 nid=0x1094 in Object.wait() [0x1e93f000..0x1e93fd14] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) at org.eclipse.jdt.internal.compiler.ReadManager.getContents(ReadManager.java:90) - locked <0x0d84b278> (a org.eclipse.jdt.internal.compiler.ReadManager) at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9485) at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9457) at org.eclipse.jdt.internal.compiler.parser.Parser.dietParse(Parser.java:8102) at org.eclipse.jdt.internal.compiler.Compiler.internalBeginToCompile(Compiler.java:696) at org.eclipse.jdt.internal.compiler.Compiler.beginToCompile(Compiler.java:376) at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:420) at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:363) at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.compile(BatchImageBuilder.java:178) at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:327) at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.build(BatchImageBuilder.java:60) at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildAll(JavaBuilder.java:254) at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:184) at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:633) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:170) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:201) at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:253) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:256) at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:309) at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:341) at org.eclipse.core.internal.resources.Workspace.build(Workspace.java:330) at org.eclipse.ui.actions.GlobalBuildAction$1.run(GlobalBuildAction.java:182) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55) "Worker-25" prio=6 tid=0x1d5bd000 nid=0x1050 in Object.wait() [0x20eaf000..0x20eafb94] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:185) - locked <0x0423af10> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:217) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:51) "Connect thread ottcvs1.ottawa.ibm.com session" prio=6 tid=0x1d3b6c00 nid=0x11a8 runnable [0x1ecbf000..0x1ecbfb94] java.lang.Thread.State: RUNNABLE at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:129) at com.jcraft.jsch.IO.getByte(IO.java:82) at com.jcraft.jsch.Session.read(Session.java:793) at com.jcraft.jsch.Session.run(Session.java:1158) at java.lang.Thread.run(Thread.java:619) "YJP-Plugin-RequestListener" daemon prio=2 tid=0x1d226800 nid=0xcfc runnable [0x211ef000..0x211efa94] java.lang.Thread.State: RUNNABLE at java.net.PlainSocketImpl.$$YJP$$socketAccept(Native Method) at java.net.PlainSocketImpl.socketAccept(PlainSocketImpl.java) at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384) - locked <0x06fa5cf0> (a java.net.SocksSocketImpl) at java.net.ServerSocket.implAccept(ServerSocket.java:453) at java.net.ServerSocket.accept(ServerSocket.java:421) at com.yourkit.b.i$1.run(a:21) at java.lang.Thread.run(Thread.java:619) "org.eclipse.jdt.internal.ui.text.JavaReconciler" daemon prio=2 tid=0x1d306400 nid=0x1644 in Object.wait() [0x1f8df000..0x1f8dfd94] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:179) - locked <0x05d7f970> (a org.eclipse.jface.text.reconciler.DirtyRegionQueue) "org.eclipse.jdt.internal.ui.text.JavaReconciler" daemon prio=2 tid=0x1ced7800 nid=0x149c in Object.wait() [0x1f54f000..0x1f54fa14] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:179) - locked <0x05c0cb98> (a org.eclipse.jface.text.reconciler.DirtyRegionQueue) "org.eclipse.jdt.internal.ui.text.JavaReconciler" daemon prio=2 tid=0x1d0ce800 nid=0x13c0 in Object.wait() [0x1f15f000..0x1f15fa94] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:179) - locked <0x0587f4e0> (a org.eclipse.jface.text.reconciler.DirtyRegionQueue) "Java indexing" daemon prio=4 tid=0x1cf2f400 nid=0xb20 in Object.wait() [0x1cf7f000..0x1cf7fb14] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) at java.lang.Object.wait(Object.java:485) at org.eclipse.jdt.internal.core.search.processing.JobManager.run(JobManager.java:371) - locked <0x05690b00> (a org.eclipse.jdt.internal.core.search.indexing.IndexManager) at java.lang.Thread.run(Thread.java:619) "Start Level Event Dispatcher" daemon prio=6 tid=0x1b630000 nid=0xc38 in Object.wait() [0x1c32f000..0x1c32fd94] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x04222620> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread) at java.lang.Object.wait(Object.java:485) at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:377) - locked <0x04222620> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread) at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:317) "Framework Event Dispatcher" daemon prio=6 tid=0x1b600800 nid=0x910 in Object.wait() [0x1c2df000..0x1c2dfa14] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) at java.lang.Object.wait(Object.java:485) at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:377) - locked <0x04222698> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread) at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:317) "State Data Manager" daemon prio=6 tid=0x1b621000 nid=0x8ec waiting on condition [0x1c28f000..0x1c28fa94] java.lang.Thread.State: TIMED_WAITING (sleeping) at java.lang.Thread.$$YJP$$sleep(Native Method) at java.lang.Thread.sleep(Thread.java) at org.eclipse.osgi.internal.baseadaptor.StateManager.run(StateManager.java:297) at java.lang.Thread.run(Thread.java:619) "Low Memory Detector" daemon prio=6 tid=0x1b49c000 nid=0xd44 runnable [0x00000000..0x00000000] java.lang.Thread.State: RUNNABLE "CompilerThread0" daemon prio=10 tid=0x1b498c00 nid=0x11a0 waiting on condition [0x00000000..0x1b8cf8bc] java.lang.Thread.State: RUNNABLE "YJPAgent-OOMESnapshotDetector" daemon prio=6 tid=0x1b497800 nid=0x1074 runnable [0x00000000..0x00000000] java.lang.Thread.State: RUNNABLE "YJPAgent-CPUSampler" daemon prio=6 tid=0x1b496800 nid=0x178c runnable [0x00000000..0x00000000] java.lang.Thread.State: RUNNABLE "YJPAgent-RequestListener" daemon prio=2 tid=0x1b495000 nid=0x53c runnable [0x1b7df000..0x1b7dfd94] java.lang.Thread.State: RUNNABLE at java.net.PlainSocketImpl.$$YJP$$socketAccept(Native Method) at java.net.PlainSocketImpl.socketAccept(PlainSocketImpl.java) at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384) - locked <0x040e5e60> (a java.net.SocksSocketImpl) at java.net.ServerSocket.implAccept(ServerSocket.java:453) at java.net.ServerSocket.accept(ServerSocket.java:421) at com.yourkit.runtime.Core$3.run(Core.java:561) at java.lang.Thread.run(Thread.java:619) "YJPAgent-Telemetry" daemon prio=6 tid=0x1af75800 nid=0x16d0 waiting on condition [0x1b48f000..0x1b48fa14] java.lang.Thread.State: TIMED_WAITING (sleeping) at java.lang.Thread.$$YJP$$sleep(Native Method) at java.lang.Thread.sleep(Thread.java) at com.yourkit.runtime.TelemetryThreadJVMTI.run(TelemetryThreadJVMTI.java:298) "JDWP Event Helper Thread" daemon prio=6 tid=0x1af64000 nid=0x17e8 runnable [0x00000000..0x00000000] java.lang.Thread.State: RUNNABLE "JDWP Transport Listener: dt_socket" daemon prio=6 tid=0x1af61000 nid=0xc34 runnable [0x00000000..0x00000000] java.lang.Thread.State: RUNNABLE "Attach Listener" daemon prio=10 tid=0x1af56000 nid=0x135c runnable [0x00000000..0x00000000] java.lang.Thread.State: RUNNABLE "Signal Dispatcher" daemon prio=10 tid=0x1af55000 nid=0x171c waiting on condition [0x00000000..0x00000000] java.lang.Thread.State: RUNNABLE "Finalizer" daemon prio=8 tid=0x1af38c00 nid=0x1420 in Object.wait() [0x1b2af000..0x1b2afc94] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116) - locked <0x040e6000> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:132) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159) "Reference Handler" daemon prio=10 tid=0x1af34400 nid=0x1344 in Object.wait() [0x1b25f000..0x1b25fd14] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) at java.lang.Object.wait(Object.java:485) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116) - locked <0x040e6020> (a java.lang.ref.Reference$Lock) "main" prio=6 tid=0x00397800 nid=0x12e8 runnable [0x009df000..0x009dfe5c] java.lang.Thread.State: RUNNABLE at org.eclipse.swt.internal.win32.OS.$$YJP$$WaitMessage(Native Method) at org.eclipse.swt.internal.win32.OS.WaitMessage(OS.java) at org.eclipse.swt.widgets.Display.sleep(Display.java:4220) at org.eclipse.ui.application.WorkbenchAdvisor.eventLoopIdle(WorkbenchAdvisor.java:364) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2383) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2346) at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2198) at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:493) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:288) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:488) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:113) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:193) 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:382) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:549) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:504) at org.eclipse.equinox.launcher.Main.run(Main.java:1236) at org.eclipse.equinox.launcher.Main.main(Main.java:1212) "VM Thread" prio=10 tid=0x1af2fc00 nid=0x6d0 runnable "VM Periodic Task Thread" prio=10 tid=0x1afae400 nid=0xdf0 waiting on condition JNI global references: 13153 Heap def new generation total 17216K, used 13784K [0x02d10000, 0x03fb0000, 0x040c0000) eden space 15360K, 77% used [0x02d10000, 0x038b63d0, 0x03c10000) from space 1856K, 100% used [0x03de0000, 0x03fb0000, 0x03fb0000) to space 1856K, 0% used [0x03c10000, 0x03c10000, 0x03de0000) tenured generation total 228020K, used 179472K [0x040c0000, 0x11f6d000, 0x12d10000) the space 228020K, 78% used [0x040c0000, 0x0f004198, 0x0f004200, 0x11f6d000) compacting perm gen total 58112K, used 57876K [0x12d10000, 0x165d0000, 0x1ad10000) the space 58112K, 99% used [0x12d10000, 0x16595178, 0x16595200, 0x165d0000) No shared spaces configured. Frederic's trace has the same issue in the ReadManager. Released for 3.5M1 Released for 3.4.1 Verified for 3.5M1 using I20080805-1307 Verified for 3.4.1 using M20080827-2000. |