Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 29192 - [Decorators] Deadlock from CVS decorator
Summary: [Decorators] Deadlock from CVS decorator
Status: CLOSED FIXED
Alias: None
Product: Platform
Classification: Eclipse Project
Component: UI (show other bugs)
Version: 2.1   Edit
Hardware: PC Windows 2000
: P2 major (vote)
Target Milestone: ---   Edit
Assignee: Tod Creasey CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on: 29212
Blocks:
  Show dependency tree
 
Reported: 2003-01-09 04:12 EST by Martin Aeschlimann CLA
Modified: 2005-05-10 14:55 EDT (History)
3 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Martin Aeschlimann CLA 2003-01-09 04:12:42 EST
After a build... Eclipse in a deadlock.

The CVS decorator running in the decorator thread got stuck with the UI thread.

The reason why we couldn't use the light weight decorator for the error ticks  
was the threading problem. I doubt that decoration in background really can be 
done.

---------------------- Exception Information ---------------------------
No Exception
 
---------------------- System Properties -------------------------------
J2RE 1.3.1 IBM Windows 32 build cn131-20020403
d:\devel\ibm_jdk1.3.1_SR1\jre\bin\java -verify -cp startup.jar 
org.eclipse.core.launcher.Main -application org.eclipse.ui.workbench -ws win32 -
data D:\workspaces\eclipse-sh2\plugins
Java Home Dir:	d:\devel\ibm_jdk1.3.1_SR1\jre
Java DLL Dir:	d:\devel\ibm_jdk1.3.1_SR1\jre\bin
Sys Classpath:	d:\devel\ibm_jdk1.3.1_SR1
\jre\lib\rt.jar;d:\devel\ibm_jdk1.3.1_SR1
\jre\lib\i18n.jar;d:\devel\ibm_jdk1.3.1_SR1\jre\classes
UserArgs:
	-Djava.class.path="L¯^R\QTJava.zip"
	-Xverify:all
	-Djava.class.path=startup.jar
	-Dinvokedviajava
---------------------- XM component Dump Routine  ----------------------
Full thread dump Classic VM (J2RE 1.3.1 IBM Windows 32 build cn131-20020403, 
native threads):
    "ModalContext" (TID:0x3EBE458, sys_thread_t:0x145D6AE0, state:CW, native 
ID:0x140) prio=5
	at java.lang.Object.wait(Native Method)
	at java.lang.Object.wait(Object.java(Compiled Code))
	at org.eclipse.team.internal.ccvs.core.syncinfo.ReentrantLock.acquire
(ReentrantLock.java(Compiled Code))
	at 
org.eclipse.team.internal.ccvs.core.resources.EclipseSynchronizer.beginOperation
(EclipseSynchronizer.java(Compiled Code))
	at 
org.eclipse.team.internal.ccvs.core.resources.EclipseSynchronizer.getFolderSync
(EclipseSynchronizer.java(Compiled Code))
	at 
org.eclipse.team.internal.ccvs.core.resources.EclipseFolder.isCVSFolder
(EclipseFolder.java(Compiled Code))
	at 
org.eclipse.team.internal.ccvs.core.util.AddDeleteMoveListener.resourceChanged
(AddDeleteMoveListener.java:215)
	at org.eclipse.core.internal.events.NotificationManager$1.run
(NotificationManager.java(Compiled Code))
	at org.eclipse.core.internal.runtime.InternalPlatform.run
(InternalPlatform.java(Compiled Code))
	at org.eclipse.core.runtime.Platform.run(Platform.java(Compiled Code))
	at org.eclipse.core.internal.events.NotificationManager.notify
(NotificationManager.java(Compiled Code))
	at org.eclipse.core.internal.events.NotificationManager.broadcastChanges
(NotificationManager.java:67)
	at org.eclipse.core.internal.resources.Workspace.broadcastChanges
(Workspace.java:153)
	at org.eclipse.core.internal.resources.Workspace.endOperation
(Workspace.java(Compiled Code))
	at org.eclipse.core.internal.resources.Workspace.build
(Workspace.java:176)
	at org.eclipse.ui.actions.GlobalBuildAction$1.run
(GlobalBuildAction.java:156)
	at org.eclipse.jface.operation.ModalContext$ModalContextThread.run
(ModalContext.java:95)
    "Snapshot" (TID:0x3EBE4B8, sys_thread_t:0x14895AE0, state:CW, native 
ID:0x750) prio=5
	at java.lang.Object.wait(Native Method)
	at org.eclipse.core.internal.resources.DelayedSnapshotRunnable.run
(DelayedSnapshotRunnable.java:38)
	at java.lang.Thread.run(Thread.java:512)
    "org.eclipse.jdt.internal.ui.text.JavaReconciler" (TID:0x8821B18, 
sys_thread_t:0x144DABD0, state:CW, native ID:0x530) prio=1
	at java.lang.Object.wait(Native Method)
	at 
org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run
(AbstractReconciler.java(Compiled Code))
    "org.eclipse.jdt.internal.ui.text.JavaReconciler" (TID:0x4FAE208, 
sys_thread_t:0x14878F30, state:CW, native ID:0x624) prio=1
	at java.lang.Object.wait(Native Method)
	at 
org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run
(AbstractReconciler.java(Compiled Code))
    "org.eclipse.jdt.internal.ui.text.JavaReconciler" (TID:0x4FAE700, 
sys_thread_t:0x147F5658, state:CW, native ID:0x460) prio=1
	at java.lang.Object.wait(Native Method)
	at 
org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run
(AbstractReconciler.java(Compiled Code))
    "org.eclipse.jdt.internal.ui.text.JavaReconciler" (TID:0x7868898, 
sys_thread_t:0x1489D990, state:CW, native ID:0x51C) prio=1
	at java.lang.Object.wait(Native Method)
	at 
org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run
(AbstractReconciler.java(Compiled Code))
    "org.eclipse.jdt.internal.ui.text.JavaReconciler" (TID:0x8A49750, 
sys_thread_t:0x14892160, state:CW, native ID:0x5B4) prio=1
	at java.lang.Object.wait(Native Method)
	at 
org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run
(AbstractReconciler.java(Compiled Code))
    "ServerConnection" (TID:0x6BFF6F8, sys_thread_t:0x1496A808, state:R, native 
ID:0x798) prio=5
	at java.net.PlainSocketImpl.socketAccept(Native Method)
	at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:446)
	at java.net.ServerSocket.implAccept(ServerSocket.java:264)
	at java.net.ServerSocket.accept(ServerSocket.java(Compiled Code))
	at 
org.eclipse.jdt.internal.junit.ui.RemoteTestRunnerClient$ServerConnection.run
(RemoteTestRunnerClient.java(Compiled Code))
    "Debug async queue" (TID:0x6EF5660, sys_thread_t:0x146B56C0, state:CW, 
native ID:0x660) prio=5
	at java.lang.Object.wait(Native Method)
	at java.lang.Object.wait(Object.java(Compiled Code))
	at org.eclipse.debug.core.DebugPlugin$AsynchRunner.run(DebugPlugin.java
(Compiled Code))
	at java.lang.Thread.run(Thread.java:512)
    "org.eclipse.jdt.internal.ui.text.JavaReconciler" (TID:0x5BAA180, 
sys_thread_t:0x14645FD0, state:CW, native ID:0x1A0) prio=1
	at java.lang.Object.wait(Native Method)
	at 
org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run
(AbstractReconciler.java(Compiled Code))
    "Decoration" (TID:0x1ECF250, sys_thread_t:0x12E69390, state:CW, native 
ID:0x7A0) prio=1
	at java.lang.Object.wait(Native Method)
	at java.lang.Object.wait(Object.java(Compiled Code))
	at org.eclipse.core.internal.utils.Semaphore.acquire(Semaphore.java:24)
	at org.eclipse.core.resources.WorkspaceLock.acquire(WorkspaceLock.java
(Compiled Code))
	at org.eclipse.ui.internal.UIWorkspaceLock.acquire(UIWorkspaceLock.java
(Compiled Code))
	at org.eclipse.core.internal.resources.WorkManager.checkIn
(WorkManager.java(Compiled Code))
	at org.eclipse.core.internal.resources.Workspace.prepareOperation
(Workspace.java(Compiled Code))
	at org.eclipse.core.internal.resources.Synchronizer.setSyncInfo
(Synchronizer.java:209)
	at 
org.eclipse.team.internal.ccvs.core.resources.SynchronizerSyncInfoCache.setCache
dSyncBytes(SynchronizerSyncInfoCache.java:268)
	at 
org.eclipse.team.internal.ccvs.core.resources.EclipseSynchronizer.cacheResourceS
yncForChildren(EclipseSynchronizer.java(Compiled Code))
	at 
org.eclipse.team.internal.ccvs.core.resources.EclipseSynchronizer.members
(EclipseSynchronizer.java:350)
	at org.eclipse.team.internal.ccvs.core.resources.EclipseFolder.members
(EclipseFolder.java:59)
	at 
org.eclipse.team.internal.ccvs.core.resources.EclipseFolder.determineDirtyCount
(EclipseFolder.java:453)
	at 
org.eclipse.team.internal.ccvs.core.resources.EclipseFolder.isModified
(EclipseFolder.java:416)
	at 
org.eclipse.team.internal.ccvs.core.resources.EclipseFolder.determineDirtyCount
(EclipseFolder.java:458)
	at 
org.eclipse.team.internal.ccvs.core.resources.EclipseFolder.isModified
(EclipseFolder.java:416)
	at 
org.eclipse.team.internal.ccvs.core.resources.EclipseFolder.determineDirtyCount
(EclipseFolder.java:458)
	at 
org.eclipse.team.internal.ccvs.core.resources.EclipseFolder.isModified
(EclipseFolder.java:416)
	at 
org.eclipse.team.internal.ccvs.core.resources.EclipseFolder.determineDirtyCount
(EclipseFolder.java:458)
	at 
org.eclipse.team.internal.ccvs.core.resources.EclipseFolder.isModified
(EclipseFolder.java:416)
	at 
org.eclipse.team.internal.ccvs.core.resources.EclipseFolder.determineDirtyCount
(EclipseFolder.java:458)
	at 
org.eclipse.team.internal.ccvs.core.resources.EclipseFolder.isModified
(EclipseFolder.java:416)
	at 
org.eclipse.team.internal.ccvs.core.resources.EclipseFolder.determineDirtyCount
(EclipseFolder.java:458)
	at 
org.eclipse.team.internal.ccvs.core.resources.EclipseFolder.isModified
(EclipseFolder.java:416)
	at 
org.eclipse.team.internal.ccvs.core.resources.EclipseFolder.determineDirtyCount
(EclipseFolder.java:458)
	at 
org.eclipse.team.internal.ccvs.core.resources.EclipseFolder.isModified
(EclipseFolder.java:416)
	at org.eclipse.team.internal.ccvs.ui.CVSLightweightDecorator$1.run
(CVSLightweightDecorator.java:101)
	at org.eclipse.team.internal.ccvs.core.resources.EclipseSynchronizer.run
(EclipseSynchronizer.java:1128)
	at org.eclipse.team.internal.ccvs.core.resources.EclipseFolder.run
(EclipseFolder.java:342)
	at org.eclipse.team.internal.ccvs.ui.CVSLightweightDecorator.isDirty
(CVSLightweightDecorator.java:97)
	at org.eclipse.team.internal.ccvs.ui.CVSLightweightDecorator.isDirty
(CVSLightweightDecorator.java:118)
	at org.eclipse.team.internal.ccvs.ui.CVSLightweightDecorator.decorate
(CVSLightweightDecorator.java:188)
	at 
org.eclipse.ui.internal.decorators.LightweightDecoratorManager$LightweightRunnab
le.run(LightweightDecoratorManager.java(Compiled Code))
	at org.eclipse.core.internal.runtime.InternalPlatform.run
(InternalPlatform.java(Compiled Code))
	at org.eclipse.core.runtime.Platform.run(Platform.java(Compiled Code))
	at 
org.eclipse.ui.internal.decorators.LightweightDecoratorManager.decorate
(LightweightDecoratorManager.java(Compiled Code))
	at 
org.eclipse.ui.internal.decorators.LightweightDecoratorManager.getDecorations
(LightweightDecoratorManager.java(Compiled Code))
	at org.eclipse.ui.internal.decorators.DecorationScheduler$3.run
(DecorationScheduler.java(Compiled Code))
	at java.lang.Thread.run(Thread.java:512)
    "Java indexing" (TID:0x900360, sys_thread_t:0x1284FD68, state:CW, native 
ID:0x2B0) prio=4
	at java.lang.Thread.sleep(Native Method)
	at org.eclipse.jdt.internal.core.search.processing.JobManager.run
(JobManager.java(Compiled Code))
	at java.lang.Thread.run(Thread.java:512)
    "Finalizer" (TID:0x901900, sys_thread_t:0x899728, state:CW, native 
ID:0x508) prio=8
	at java.lang.Object.wait(Native Method)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:133)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java(Compiled 
Code))
	at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java(Compiled 
Code))
    "Reference Handler" (TID:0x901948, sys_thread_t:0x87A008, state:CW, native 
ID:0x480) prio=10
	at java.lang.Object.wait(Native Method)
	at java.lang.Object.wait(Object.java(Compiled Code))
	at java.lang.ref.Reference$ReferenceHandler.run(Reference.java(Compiled 
Code))
    "Signal dispatcher" (TID:0x901990, sys_thread_t:0x8791E8, state:R, native 
ID:0x698) prio=5
    "main" (TID:0x9019D8, sys_thread_t:0x23E860, state:R, native ID:0x330) 
prio=5
	at org.eclipse.swt.internal.win32.OS.WaitMessage(Native Method)
	at org.eclipse.swt.widgets.Display.sleep(Display.java(Compiled Code))
	at org.eclipse.jface.operation.ModalContext$ModalContextThread.block
(ModalContext.java(Compiled Code))
*** Exception 0 received during dump routine processing, section truncated.
---------------------- LK component Dump Routine  ----------------------
Monitor pool info:
  Initial monitor count: 32
  Minimum number of free monitors before expansion: 5
  Pool will next be expanded by: 921
  Current total number of monitors: 1842
  Current number of free monitors: 1732
Monitor Pool Dump (flat & inflated object-monitors):
  sys_mon_t:0x0023DBE8 infl_mon_t: 0x0023D7D8:
    java.lang.ref.Reference$Lock@912570/912578: <unowned>
	Waiting to be notified:
	    "Reference Handler" (0x87A008)
  sys_mon_t:0x0023DC38 infl_mon_t: 0x0023D818:
    java.lang.ref.ReferenceQueue$Lock@912180/912188: <unowned>
	Waiting to be notified:
	    "Finalizer" (0x899728)
  sys_mon_t:0x0023DC60 infl_mon_t: 0x0023D838:
    org.eclipse.jface.text.reconciler.DirtyRegionQueue@5C37E88/5C37E90: 
<unowned>
	Waiting to be notified:
	    "org.eclipse.jdt.internal.ui.text.JavaReconciler" (0x14645FD0)
  sys_mon_t:0x0023DDA0 infl_mon_t: 0x0023D938:
    org.eclipse.debug.core.DebugPlugin$AsynchRunner@6EF4F80/6EF4F88: <unowned>
	Waiting to be notified:
	    "Debug async queue" (0x146B56C0)
  sys_mon_t:0x0023DE18 infl_mon_t: 0x0023D998:
    org.eclipse.jface.text.reconciler.DirtyRegionQueue@8ADA6C0/8ADA6C8: 
<unowned>
	Waiting to be notified:
	    "org.eclipse.jdt.internal.ui.text.JavaReconciler" (0x1489D990)
  sys_mon_t:0x14817FE0 infl_mon_t: 0x1478A6A8:
    org.eclipse.core.internal.utils.Semaphore@93D9A18/93D9A20: <unowned>
	Waiting to be notified:
	    "Decoration" (0x12E69390)
  sys_mon_t:0x14830B78 infl_mon_t: 0x1484D188:
    org.eclipse.jface.text.reconciler.DirtyRegionQueue@39428D0/39428D8: 
<unowned>
	Waiting to be notified:
	    "org.eclipse.jdt.internal.ui.text.JavaReconciler" (0x14892160)
  sys_mon_t:0x1489A698 infl_mon_t: 0x1487F718:
    org.eclipse.jface.text.reconciler.DirtyRegionQueue@5B3D188/5B3D190: 
<unowned>
	Waiting to be notified:
	    "org.eclipse.jdt.internal.ui.text.JavaReconciler" (0x147F5658)
  sys_mon_t:0x148D5720 infl_mon_t: 0x14937870:
    org.eclipse.jface.text.reconciler.DirtyRegionQueue@A49AAC0/A49AAC8: 
<unowned>
	Waiting to be notified:
	    "org.eclipse.jdt.internal.ui.text.JavaReconciler" (0x144DABD0)
  sys_mon_t:0x148D5C20 infl_mon_t: 0x14937C70:
    org.eclipse.jface.text.reconciler.DirtyRegionQueue@74FD770/74FD778: 
<unowned>
	Waiting to be notified:
	    "org.eclipse.jdt.internal.ui.text.JavaReconciler" (0x14878F30)
  sys_mon_t:0x148F6EA0 infl_mon_t: 0x14912258:
    org.eclipse.team.internal.ccvs.core.syncinfo.ReentrantLock@14A9AE8/14A9AF0: 
<unowned>
	Waiting to be notified:
	    "ModalContext" (0x145D6AE0)
  sys_mon_t:0x14992CA8 infl_mon_t: 0x149123F8:
    
org.eclipse.core.internal.resources.DelayedSnapshotRunnable@7D96D98/7D96DA0: 
<unowned>
	Waiting to be notified:
	    "Snapshot" (0x14895AE0)
JVM System Monitor Dump (registered monitors):
    Evacuation Region lock: <unowned>
    Heap Promotion lock: <unowned>
    Sleep lock: <unowned>
	Waiting to be notified:
	    "Java indexing" (0x1284FD68)
    Method trace lock: <unowned>
    Heap lock: owner "Signal dispatcher" (0x8791E8), entry count 1
    Monitor Cache lock: owner "Signal dispatcher" (0x8791E8), entry count 1
    JNI Pinning lock: <unowned>
    JNI Global Reference lock: <unowned>
    Classloader lock: <unowned>
    Binclass lock: <unowned>
    Monitor Registry lock: owner "Signal dispatcher" (0x8791E8), entry count 1
    Thread queue lock: owner "Signal dispatcher" (0x8791E8), entry count 1
Thread identifiers (as used in flat monitors):
    ident 0x12 "ModalContext" (0x145D6AE0) ee 0x145D68D0
    ident 0x1E "Snapshot" (0x14895AE0) ee 0x148958D0
    ident 0x10 "org.eclipse.jdt.internal.ui.text.JavaReconciler" (0x144DABD0) 
ee 0x144DA9C0
    ident 0x1B "org.eclipse.jdt.internal.ui.text.JavaReconciler" (0x14878F30) 
ee 0x14878D20
    ident 0x17 "org.eclipse.jdt.internal.ui.text.JavaReconciler" (0x147F5658) 
ee 0x147F5448
    ident 0x08 "org.eclipse.jdt.internal.ui.text.JavaReconciler" (0x1489D990) 
ee 0x1489D780
    ident 0x1F "org.eclipse.jdt.internal.ui.text.JavaReconciler" (0x14892160) 
ee 0x14891F50
    ident 0x1A "ServerConnection" (0x1496A808) ee 0x1496A5F8
    ident 0x16 "Debug async queue" (0x146B56C0) ee 0x146B54B0
    ident 0x14 "org.eclipse.jdt.internal.ui.text.JavaReconciler" (0x14645FD0) 
ee 0x14645DC0
    ident 0x09 "Decoration" (0x12E69390) ee 0x12E69180
    ident 0x07 "Java indexing" (0x1284FD68) ee 0x1284FB58
    ident 0x05 "Finalizer" (0x899728) ee 0x00899518
    ident 0x04 "Reference Handler" (0x87A008) ee 0x00879DF8
    ident 0x03 "Signal dispatcher" (0x8791E8) ee 0x00878FD8
    ident 0x02 "main" (0x23E860) ee 0x0023E650
Java Object Monitor Dump (flat & inflated object-monitors):
    java.lang.ref.ReferenceQueue$Lock@912180/912188
        locknflags 80000400 Monitor inflated infl_mon 0x0023D818
    java.lang.ref.Reference$Lock@912570/912578
        locknflags 80000200 Monitor inflated infl_mon 0x0023D7D8
    org.eclipse.team.internal.ccvs.core.syncinfo.ReentrantLock@14A9AE8/14A9AF0
        locknflags 8003C700 Monitor inflated infl_mon 0x14912258
    org.eclipse.jface.text.reconciler.DirtyRegionQueue@39428D0/39428D8
        locknflags 80008B00 Monitor inflated infl_mon 0x1484D188
    org.eclipse.jface.text.reconciler.DirtyRegionQueue@5B3D188/5B3D190
        locknflags 8001CE00 Monitor inflated infl_mon 0x1487F718
    org.eclipse.jface.text.reconciler.DirtyRegionQueue@5C37E88/5C37E90
        locknflags 80000500 Monitor inflated infl_mon 0x0023D838
    org.eclipse.debug.core.DebugPlugin$AsynchRunner@6EF4F80/6EF4F88
        locknflags 80000D00 Monitor inflated infl_mon 0x0023D938
    java.net.PlainSocketImpl@73010A0/73010A8
        locknflags 001A0000 Flat locked by thread ident 0x1A, entry count 1
    org.eclipse.jface.text.reconciler.DirtyRegionQueue@74FD770/74FD778
        locknflags 80033300 Monitor inflated infl_mon 0x14937C70
    org.eclipse.core.internal.resources.DelayedSnapshotRunnable@7D96D98/7D96DA0
        locknflags 8003D400 Monitor inflated infl_mon 0x149123F8
    org.eclipse.jface.text.reconciler.DirtyRegionQueue@8ADA6C0/8ADA6C8
        locknflags 80001000 Monitor inflated infl_mon 0x0023D998
    org.eclipse.jface.text.reconciler.DirtyRegionQueue@A49AAC0/A49AAC8
        locknflags 80031300 Monitor inflated infl_mon 0x14937870
---------------------- END OF DUMP -------------------------------------
Comment 1 Tod Creasey CLA 2003-01-09 10:11:04 EST
The issue here appears to be lock ordering. Thanks for the traces Martin they 
were a huge help.

In both Threads the CVS component is trying to do work.

In the builder Thread it is trying to acquired the CVS lock but likely already 
has the Workspace lock which it appears to be waiting for.

In the decorator thread it it is trying to acquire the workspace lock and it 
has the CVS lock.

We need to have a definate ordering of locks. I will talk to Core and Team for 
more insight.
Comment 2 Tod Creasey CLA 2003-01-22 09:57:38 EST
Fixed as a result of fixes to Bug 29212
Comment 3 Tod Creasey CLA 2005-05-10 14:55:52 EDT
Marking closed