Details
-
Type:
Bug
-
Status:
Open
-
Priority:
Major
-
Resolution: Unresolved
-
Affects Version/s: 3.0.1
-
Fix Version/s: 3.1.4
-
Component/s: None
-
Labels:None
-
Environment:prototype-opt Jikes RVM 3.0.1+svn (r15231), GNU classpath 97.2p7
-
Number of attachments :
Description
When running, e.g., the tiny test suite with -X:aos:initial_compiler=opt once in a while a deadlock situation occurs. I think I tracked down the cause; below is a excerpt from my debug output, produced by TestClassHierarchy (I have marked the synchronized methods which IMHO cause the deadlock.):
org.jikesrvm.scheduler.greenthreads.GreenProcessor.dispatch(boolean):325 : Switching to thread CompilationThread
org.jikesrvm.scheduker.ThinLock.lock():185 : Locking Ljava/lang/Class; 0x15edba54 == Ljava/lang/reflect/Proxy;
org.jikesrvm.scheduler.Scheduler.yield():275 : Thread CompilationThread yields in context ...
Lorg/jikesrvm/scheduler/ThinLock;.lock (Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;)V 0x00000872 186
Lorg/jikesrvm/objectmodel/JavaHeader;.genericLock (Ljava/lang/Object;)V 0x00000025 582
Lorg/jikesrvm/objectmodel/ObjectModel;.genericLock (Ljava/lang/Object;)V 0x0000001b 468
Ljava/lang/reflect/Proxy;.getProxyClass (Ljava/lang/ClassLoader;[Ljava/lang/Class;)Ljava/lang/Class; 0x00000035 0
Ljava/lang/reflect/Proxy;.newProxyInstance (Ljava/lang/ClassLoader;[Ljava/lang/Class;Ljava/lang/reflect/InvocationHandler;)Ljava/lang/Object; 0x0000003e 321
Lorg/jikesrvm/classloader/RVMAnnotation;.createValue ()Ljava/lang/annotation/Annotation; 0x0000017a 127
Lorg/jikesrvm/classloader/RVMAnnotation;.getValue ()Ljava/lang/annotation/Annotation; 0x00000069 107
Lorg/jikesrvm/classloader/AnnotatedElement;.toAnnotations (Ljava/lang/Object[Ljava/lang/annotation/Annotation; 0x00000208 140
Lorg/jikesrvm/classloader/AnnotatedElement;.getDeclaredAnnotationsInternal ()[Ljava/lang/annotation/Annotation; 0x000000d5 105
Lorg/jikesrvm/classloader/AnnotatedElement;.getAnnotationsInternal ()[Ljava/lang/annotation/Annotation; 0x00000033 90
Lorg/jikesrvm/classloader/AnnotatedElement;.getAnnotation (Ljava/lang/Class;)Ljava/lang/annotation/Annotation; 0x000000bb 154
Lorg/jikesrvm/classloader/AnnotatedElement;.isAnnotationPresent (Ljava/lang/Class;)Z 0x00000049 166
Lorg/jikesrvm/classloader/AnnotatedElement;.hasNoInlineAnnotation ()Z 0x0000003d 280
Lorg/jikesrvm/classloader/RVMMethod;.hasNoInlinePragma ()Z 0x00000042 640
Lorg/jikesrvm/compilers/opt/inlining/InlineTools;.hasNoInlinePragma (Lorg/jikesrvm/classloader/RVMMethod;Lorg/jikesrvm/compilers/opt/inlining/CompilationState;)Z 0x00000038 241
Lorg/jikesrvm/compilers/opt/inlining/DefaultInlineOracle;.shouldInline (Lorg/jikesrvm/compilers/opt/inlining/CompilationState;)Lorg/jikesrvm/compilers/opt/inlining/InlineDecision; 0x00000301 67
Lorg/jikesrvm/compilers/opt/bc2ir/BC2IR;.shouldInline (Lorg/jikesrvm/compilers/opt/ir/Instruction;ZI)Lorg/jikesrvm/compilers/opt/inlining/InlineDecision; 0x00000143 4598
Lorg/jikesrvm/compilers/opt/bc2ir/BC2IR;.generateFrom (I)V 0x00007d12 1975
Lorg/jikesrvm/compilers/opt/bc2ir/BC2IR;.generateHIR ()V 0x00000200 379
Lorg/jikesrvm/compilers/opt/bc2ir/BC2IR;.generateHIR (Lorg/jikesrvm/compilers/opt/bc2ir/GenerationContext;)V 0x00000068 177
Lorg/jikesrvm/compilers/opt/inlining/Inliner;.execute (Lorg/jikesrvm/compilers/opt/inlining/InlineDecision;Lorg/jikesrvm/compilers/opt/bc2ir/GenerationContext;Lorg/jikesrvm/compilers/opt/ir/ExceptionHandlerBasicBlockBag;Lorg/jikesrvm/compilers/opt/ir/Instruction;)Lorg/jikesrvm/compilers/opt/bc2ir/GenerationContext; 0x00001d27 448
Lorg/jikesrvm/compilers/opt/bc2ir/BC2IR;.maybeInlineMethod (Lorg/jikesrvm/compilers/opt/inlining/InlineDecision;Lorg/jikesrvm/compilers/opt/ir/Instruction;)Z 0x00000149 4641
Lorg/jikesrvm/compilers/opt/bc2ir/BC2IR;.generateFrom (I)V 0x00007d2b 1975
Lorg/jikesrvm/compilers/opt/bc2ir/BC2IR;.generateHIR ()V 0x00000200 379
Lorg/jikesrvm/compilers/opt/bc2ir/BC2IR;.generateHIR (Lorg/jikesrvm/compilers/opt/bc2ir/GenerationContext;)V 0x00000068 177
Lorg/jikesrvm/compilers/opt/bc2ir/ConvertBCtoHIR;.perform (Lorg/jikesrvm/compilers/opt/ir/IR;)V 0x0000009d 36
Lorg/jikesrvm/compilers/opt/driver/CompilerPhase;.performPhase (Lorg/jikesrvm/compilers/opt/ir/IR;)V 0x0000029a 205
Lorg/jikesrvm/compilers/opt/driver/OptimizationPlanAtomicElement;.perform (Lorg/jikesrvm/compilers/opt/ir/IR;)V 0x0000010d 89
Lorg/jikesrvm/compilers/opt/driver/OptimizationPlanCompositeElement;.perform (Lorg/jikesrvm/compilers/opt/ir/IR;)V 0x0000024c 143
Lorg/jikesrvm/compilers/opt/driver/CompilationPlan;.execute ()Lorg/jikesrvm/compilers/opt/ir/IR; 0x0000013b 131
Lorg/jikesrvm/compilers/opt/driver/OptimizingCompiler;.compile (Lorg/jikesrvm/compilers/opt/driver/CompilationPlan;)Lorg/jikesrvm/compilers/common/CompiledMethod; 0x00000087 224
Lorg/jikesrvm/compilers/common/RuntimeCompiler;.optCompile (Lorg/jikesrvm/classloader/NormalMethod;Lorg/jikesrvm/compilers/opt/driver/CompilationPlan;)Lorg/jikesrvm/compilers/common/CompiledMethod; 0x000000d2 358
Lorg/jikesrvm/compilers/common/RuntimeCompiler;.recompileWithOpt (Lorg/jikesrvm/compilers/opt/driver/CompilationPlan;)I 0x000000b2 537
Lorg/jikesrvm/adaptive/controller/ControllerPlan;.doRecompile ()Lorg/jikesrvm/compilers/common/CompiledMethod; 0x0000016b 179
Lorg/jikesrvm/adaptive/recompilation/CompilationThread;.run ()V 0x000000a6 52
Lorg/jikesrvm/scheduler/RVMThread;.startoff ()V 0x00000040 646
Invisible methodorg.jikesrvm.scheduler.greenthreads.GreenProcessor.dispatch(boolean):325 : Switching to thread MainThread
org.jikesrvm.scheduker.ThinLock.lock():185 : Locking Ljava/lang/Class; 0x15ed9b0b == Lorg/jikesrvm/compilers/common/RuntimeCompiler;
org.jikesrvm.scheduler.Scheduler.yield():275 : Thread MainThread yields in context ...
Lorg/jikesrvm/scheduler/ThinLock;.lock (Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;)V 0x00000872 186
Lorg/jikesrvm/objectmodel/JavaHeader;.genericLock (Ljava/lang/Object;)V 0x00000025 582
Lorg/jikesrvm/objectmodel/ObjectModel;.genericLock (Ljava/lang/Object;)V 0x0000001b 468
Lorg/jikesrvm/compilers/common/RuntimeCompiler;.optCompileWithFallBack (Lorg/jikesrvm/classloader/NormalMethod;Lorg/jikesrvm/compilers/opt/driver/CompilationPlan;)Lorg/jikesrvm/compilers/common/CompiledMethod; 0x00000034 0
Lorg/jikesrvm/compilers/common/RuntimeCompiler;.compile (Lorg/jikesrvm/classloader/NormalMethod;)Lorg/jikesrvm/compilers/common/CompiledMethod; 0x0000038b 686
Lorg/jikesrvm/classloader/NormalMethod;.genCode ()Lorg/jikesrvm/compilers/common/CompiledMethod; 0x000000aa 175
Lorg/jikesrvm/classloader/RVMMethod;.compile ()V 0x000001bf 715
Lorg/jikesrvm/runtime/DynamicLinker$DL_Helper;.compileMethod (Lorg/jikesrvm/runtime/DynamicLink;Lorg/jikesrvm/classloader/RVMMethod;)V 0x00000097 149
Lorg/jikesrvm/runtime/DynamicLinker;.lazyMethodInvoker ()V 0x00000074 45
Ljava/net/URLClassLoader;.findClass (Ljava/lang/String;)Ljava/lang/Class; 0x0000018b 524
Ljava/lang/ClassLoader;.loadClass (Ljava/lang/String;Z)Ljava/lang/Class; 0x0000017e 341
Ljava/lang/ClassLoader;.loadClass (Ljava/lang/String;)Ljava/lang/Class; 0x0000003f 293
Lorg/jikesrvm/classloader/TypeReference;.resolveInternal ()Lorg/jikesrvm/classloader/RVMType; 0x0000010c 774
Lorg/jikesrvm/classloader/TypeReference;.resolve ()Lorg/jikesrvm/classloader/RVMType; 0x0000005a 762
Lorg/jikesrvm/scheduler/MainThread;.run ()V 0x00000108 161
Lorg/jikesrvm/scheduler/RVMThread;.run ()V 0x0000011f 621
Lorg/jikesrvm/scheduler/RVMThread;.startoff ()V 0x00000040 646
Invisible methodorg.jikesrvm.scheduler.greenthreads.GreenProcessor.dispatch(boolean):325 : Switching to thread ControllerThread
org.jikesrvm.scheduker.ThinLock.lock():185 : Locking Ljava/lang/Class; 0x15ed9b0b == Lorg/jikesrvm/compilers/common/RuntimeCompiler;
org.jikesrvm.scheduler.Scheduler.yield():275 : Thread ControllerThread yields in context ...
Lorg/jikesrvm/scheduler/ThinLock;.lock (Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;)V 0x00000872 186
Lorg/jikesrvm/objectmodel/JavaHeader;.genericLock (Ljava/lang/Object;)V 0x00000025 582
Lorg/jikesrvm/objectmodel/ObjectModel;.genericLock (Ljava/lang/Object;)V 0x0000001b 468
Lorg/jikesrvm/compilers/common/RuntimeCompiler;.optCompileWithFallBack (Lorg/jikesrvm/classloader/NormalMethod;Lorg/jikesrvm/compilers/opt/driver/CompilationPlan;)Lorg/jikesrvm/compilers/common/CompiledMethod; 0x00000034 0
Lorg/jikesrvm/compilers/common/RuntimeCompiler;.compile (Lorg/jikesrvm/classloader/NormalMethod;)Lorg/jikesrvm/compilers/common/CompiledMethod; 0x0000038b 686
Lorg/jikesrvm/classloader/NormalMethod;.genCode ()Lorg/jikesrvm/compilers/common/CompiledMethod; 0x000000aa 175
Lorg/jikesrvm/classloader/RVMMethod;.compile ()V 0x000001bf 715
Lorg/jikesrvm/runtime/Reflection;.outOfLineInvoke (Lorg/jikesrvm/classloader/RVMMethod;Ljava/lang/Object;[Ljava/lang/Object;Z)Ljava/lang/Object; 0x000004ab 169
Lorg/jikesrvm/runtime/Reflection;.invoke (Lorg/jikesrvm/classloader/RVMMethod;Lorg/jikesrvm/runtime/ReflectionBase;Ljava/lang/Object;[Ljava/lang/Object;Z)Ljava/lang/Object; 0x00000189 81
Ljava/lang/Class;.newInstance ()Ljava/lang/Object; 0x000002ec 870
Lorg/jikesrvm/classloader/RVMMethod;.getInvoker ()Lorg/jikesrvm/runtime/ReflectionBase; 0x00000461 897
Ljava/lang/reflect/VMMethod;.<init> (Lorg/jikesrvm/classloader/RVMMethod;)V 0x000000aa 42
Ljava/lang/reflect/JikesRVMSupport;.createMethod (Lorg/jikesrvm/classloader/RVMMethod;)Ljava/lang/reflect/Method; 0x00000082 27
Ljava/lang/Class;.getMethods ()[Ljava/lang/reflect/Method; 0x00000249 1012
Ljava/lang/reflect/Proxy$ProxyData;.getProxyData (Ljava/lang/reflect/Proxy$ProxyType;)Ljava/lang/reflect/Proxy$ProxyData; 0x00000648 734
Ljava/lang/reflect/Proxy;.getProxyClass (Ljava/lang/ClassLoader;[Ljava/lang/Class;)Ljava/lang/Class; 0x00000263 274
Ljava/lang/reflect/Proxy;.newProxyInstance (Ljava/lang/ClassLoader;[Ljava/lang/Class;Ljava/lang/reflect/InvocationHandler;)Ljava/lang/Object; 0x0000003e 321
Lorg/jikesrvm/classloader/RVMAnnotation;.createValue ()Ljava/lang/annotation/Annotation; 0x0000017a 127
Lorg/jikesrvm/classloader/RVMAnnotation;.getValue ()Ljava/lang/annotation/Annotation; 0x00000069 107
Lorg/jikesrvm/classloader/AnnotatedElement;.toAnnotations (Ljava/lang/Object[Ljava/lang/annotation/Annotation; 0x000000fe 134
Lorg/jikesrvm/classloader/AnnotatedElement;.getDeclaredAnnotationsInternal ()[Ljava/lang/annotation/Annotation; 0x000000d5 105
Lorg/jikesrvm/classloader/AnnotatedElement;.getAnnotationsInternal ()[Ljava/lang/annotation/Annotation; 0x00000033 90
Lorg/jikesrvm/classloader/AnnotatedElement;.getAnnotation (Ljava/lang/Class;)Ljava/lang/annotation/Annotation; 0x000000bb 154
Lorg/jikesrvm/classloader/AnnotatedElement;.isAnnotationPresent (Ljava/lang/Class;)Z 0x00000049 166
Lorg/jikesrvm/classloader/AnnotatedElement;.hasNoOptCompileAnnotation ()Z 0x0000003d 264
Lorg/jikesrvm/adaptive/controller/RecompilationStrategy;.getPreviousCompiler (Lorg/jikesrvm/compilers/common/CompiledMethod;)I 0x000001b7 201
Lorg/jikesrvm/adaptive/controller/AnalyticModel;.considerHotMethod (Lorg/jikesrvm/compilers/common/CompiledMethod;Lorg/jikesrvm/adaptive/controller/HotMethodEvent;)Lorg/jikesrvm/adaptive/controller/ControllerPlan; 0x00000050 88
Lorg/jikesrvm/adaptive/controller/HotMethodRecompilationEvent;.process ()V 0x0000005e 49
Lorg/jikesrvm/adaptive/controller/ControllerThread;.run ()V 0x000004c7 158
Lorg/jikesrvm/scheduler/RVMThread;.startoff ()V 0x00000040 646
Invisible methodorg.jikesrvm.scheduler.greenthreads.GreenProcessor.dispatch(boolean):325 : Switching to thread CompilationThread
org.jikesrvm.scheduler.greenthreads.GreenProcessor.dispatch(boolean):325 : Switching to thread MainThread
org.jikesrvm.scheduler.greenthreads.GreenProcessor.dispatch(boolean):325 : Switching to thread ControllerThread
org.jikesrvm.scheduler.greenthreads.GreenProcessor.dispatch(boolean):325 : Switching to thread IdleThread
And now it's IdleThread till christmas. ![]()
My first attempt at fixing this was wrapping all of RVMAnnotation.createValue() in a synchronized block (on RuntimeCompiler.class) and it indeed significantly reduces the frequency of deadlocks. It's still not zero, though, as the tInstance test sometimes deadlocks. As far as I have been able to figure out, this is because of an attempt to cache the synthetic ReflectionBase class (as per Reflection.cacheInvokerInJavaLangReflect) in VMMethod's constructor. The following debug output illustrates the phenomenon (Please note that this output was produced using the fix suggested above, i.e., RVMAnnotation.createValue() synchronizes on RuntimeCompiler.class):
org.jikesrvm.scheduler.greenthreads.GreenProcessor.dispatch(boolean):325 : Switching to thread MainThread
org.jikesrvm.scheduker.ThinLock.lock():185 : Locking Ljava/lang/Class; 0x15ee42f8 == Lorg/jikesrvm/compilers/common/RuntimeCompiler;
org.jikesrvm.scheduler.Scheduler.yield():275 : Thread MainThread yields in context ...
Lorg/jikesrvm/scheduler/ThinLock;.lock (Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;)V 0x00000872 186
Lorg/jikesrvm/objectmodel/JavaHeader;.genericLock (Ljava/lang/Object;)V 0x00000025 582
Lorg/jikesrvm/objectmodel/ObjectModel;.genericLock (Ljava/lang/Object;)V 0x0000001b 468
Lorg/jikesrvm/compilers/common/RuntimeCompiler;.optCompileWithFallBack (Lorg/jikesrvm/classloader/NormalMethod;Lorg/jikesrvm/compilers/opt/driver/CompilationPlan;)Lorg/jikesrvm/compilers/common/CompiledMethod; 0x00000034 0*
Lorg/jikesrvm/compilers/common/RuntimeCompiler;.compile (Lorg/jikesrvm/classloader/NormalMethod;)Lorg/jikesrvm/compilers/common/CompiledMethod; 0x0000038b 686
Lorg/jikesrvm/classloader/NormalMethod;.genCode ()Lorg/jikesrvm/compilers/common/CompiledMethod; 0x000000aa 175
Lorg/jikesrvm/classloader/RVMMethod;.compile ()V 0x000001bf 715
Lorg/jikesrvm/runtime/Reflection;.outOfLineInvoke (Lorg/jikesrvm/classloader/RVMMethod;Ljava/lang/Object;[Ljava/lang/Object;Z)Ljava/lang/Object; 0x000004ab 169
Lorg/jikesrvm/runtime/Reflection;.invoke (Lorg/jikesrvm/classloader/RVMMethod;Lorg/jikesrvm/runtime/ReflectionBase;Ljava/lang/Object;[Ljava/lang/Object;Z)Ljava/lang/Object; 0x00000189 81
Ljava/lang/Class;.newInstance ()Ljava/lang/Object; 0x000002ec 870
Lorg/jikesrvm/classloader/RVMMethod;.getInvoker ()Lorg/jikesrvm/runtime/ReflectionBase; 0x000001dc 897
Ljava/lang/reflect/VMMethod;.<init> (Lorg/jikesrvm/classloader/RVMMethod;)V 0x000000aa 42
Ljava/lang/reflect/JikesRVMSupport;.createMethod (Lorg/jikesrvm/classloader/RVMMethod;)Ljava/lang/reflect/Method; 0x00000082 27
Ljava/lang/Class;.getMethods ()[Ljava/lang/reflect/Method; 0x00000249 1012
Ltest/org/jikesrvm/basic/core/reflect/tInstance;.main ([Ljava/lang/String;)V 0x000000de 70
Invisible method
Lorg/jikesrvm/runtime/Reflection;.outOfLineInvoke (Lorg/jikesrvm/classloader/RVMMethod;Ljava/lang/Object;[Ljava/lang/Object;Z)Ljava/lang/Object; 0x00000659 190
Lorg/jikesrvm/runtime/Reflection;.invoke (Lorg/jikesrvm/classloader/RVMMethod;Lorg/jikesrvm/runtime/ReflectionBase;Ljava/lang/Object;[Ljava/lang/Object;Z)Ljava/lang/Object; 0x00000189 81
Lorg/jikesrvm/scheduler/MainThread;.run ()V 0x00000464 202
Lorg/jikesrvm/scheduler/RVMThread;.run ()V 0x0000011f 621
Lorg/jikesrvm/scheduler/RVMThread;.startoff ()V 0x00000040 646
Invisible methodorg.jikesrvm.scheduler.greenthreads.GreenProcessor.dispatch(boolean):325 : Switching to thread ControllerThread
org.jikesrvm.scheduker.ThinLock.lock():185 : Locking Lorg/jikesrvm/classloader/NormalMethod; 0x15ecceab == Ljava/lang/Object;.notifyAll ()V
org.jikesrvm.scheduler.Scheduler.yield():275 : Thread ControllerThread yields in context ...
Lorg/jikesrvm/scheduler/ThinLock;.lock (Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;)V 0x00000872 186
Lorg/jikesrvm/objectmodel/JavaHeader;.genericLock (Ljava/lang/Object;)V 0x00000025 582
Lorg/jikesrvm/objectmodel/ObjectModel;.genericLock (Ljava/lang/Object;)V 0x0000001b 468
Lorg/jikesrvm/classloader/RVMMethod;.getCurrentEntryCodeArray ()Lorg/jikesrvm/ArchitectureSpecific$CodeArray; 0x00000030 0
Lorg/jikesrvm/classloader/RVMClass;.instantiate ()V 0x000003fe 1980
Lorg/jikesrvm/runtime/RuntimeEntrypoints;.initializeClassForDynamicLink (Lorg/jikesrvm/classloader/RVMClass;)V 0x0000010f 544
Lorg/jikesrvm/classloader/RVMClass;.createReflectionClass (Lorg/jikesrvm/classloader/RVMMethod;)Ljava/lang/Class; 0x00000434 2492
Lorg/jikesrvm/classloader/RVMMethod;.getInvoker ()Lorg/jikesrvm/runtime/ReflectionBase; 0x0000019e 894
Ljava/lang/reflect/VMMethod;.<init> (Lorg/jikesrvm/classloader/RVMMethod;)V 0x000000aa 42
Ljava/lang/reflect/JikesRVMSupport;.createMethod (Lorg/jikesrvm/classloader/RVMMethod;)Ljava/lang/reflect/Method; 0x00000082 27
Ljava/lang/Class;.getMethods ()[Ljava/lang/reflect/Method; 0x00000249 1012
Ljava/lang/reflect/Proxy$ProxyData;.getProxyData (Ljava/lang/reflect/Proxy$ProxyType;)Ljava/lang/reflect/Proxy$ProxyData; 0x00000648 734
Ljava/lang/reflect/Proxy;.getProxyClass (Ljava/lang/ClassLoader;[Ljava/lang/Class;)Ljava/lang/Class; 0x00000263 274
Ljava/lang/reflect/Proxy;.newProxyInstance (Ljava/lang/ClassLoader;[Ljava/lang/Class;Ljava/lang/reflect/InvocationHandler;)Ljava/lang/Object; 0x0000003e 321
Lorg/jikesrvm/classloader/RVMAnnotation;.createValue ()Ljava/lang/annotation/Annotation; 0x0000019e 129
Lorg/jikesrvm/classloader/RVMAnnotation;.getValue ()Ljava/lang/annotation/Annotation; 0x00000069 108
Lorg/jikesrvm/classloader/AnnotatedElement;.toAnnotations (Ljava/lang/Object[Ljava/lang/annotation/Annotation; 0x000000fe 134
Lorg/jikesrvm/classloader/AnnotatedElement;.getDeclaredAnnotationsInternal ()[Ljava/lang/annotation/Annotation; 0x000000d5 105
Lorg/jikesrvm/classloader/AnnotatedElement;.getAnnotationsInternal ()[Ljava/lang/annotation/Annotation; 0x00000033 90
Lorg/jikesrvm/classloader/AnnotatedElement;.getAnnotation (Ljava/lang/Class;)Ljava/lang/annotation/Annotation; 0x000000bb 154
Lorg/jikesrvm/classloader/AnnotatedElement;.isAnnotationPresent (Ljava/lang/Class;)Z 0x00000049 166
Lorg/jikesrvm/classloader/AnnotatedElement;.hasNoOptCompileAnnotation ()Z 0x0000003d 264
Lorg/jikesrvm/adaptive/controller/RecompilationStrategy;.getPreviousCompiler (Lorg/jikesrvm/compilers/common/CompiledMethod;)I 0x000001b7 201
Lorg/jikesrvm/adaptive/controller/AnalyticModel;.considerHotMethod (Lorg/jikesrvm/compilers/common/CompiledMethod;Lorg/jikesrvm/adaptive/controller/HotMethodEvent;)Lorg/jikesrvm/adaptive/controller/ControllerPlan; 0x00000050 88
Lorg/jikesrvm/adaptive/controller/HotMethodRecompilationEvent;.process ()V 0x0000005e 49
Lorg/jikesrvm/adaptive/controller/ControllerThread;.run ()V 0x000004c7 158
Lorg/jikesrvm/scheduler/RVMThread;.startoff ()V 0x00000040 646
Invisible methodorg.jikesrvm.scheduler.greenthreads.GreenProcessor.dispatch(boolean):325 : Switching to thread MainThread
org.jikesrvm.scheduler.greenthreads.GreenProcessor.dispatch(boolean):325 : Switching to thread ControllerThread
org.jikesrvm.scheduler.greenthreads.GreenProcessor.dispatch(boolean):325 : Switching to thread IdleThread
Here the deadlock occurs because ControllerThread has obtained the lock for RuntimeCompiler.class (in Annotation.createValue()!) and wants to synchronize on the notifyAll() NormalMethod, while the MainThread, which caches, among other methods, a ReflectionBase class for notifyAll() wants to synchonize on the RuntimeCompiler.class. I am not sure what's the best what to tackle this issue, though.
FWIW, these deadlocks occur in older revisions, too. Originally, I encountered them in r14750, which I am currently working with. (I know, I should update, but SVN vendor branches are sometimes more trouble than they are worth.
)