JDK-8030063 : JSR292: deadlock during class loading of classes from j.l.invoke package
  • Type: Bug
  • Component: hotspot
  • Sub-Component: compiler
  • Affected Version: hs25,8
  • Priority: P4
  • Status: Closed
  • Resolution: Won't Fix
  • Submitted: 2013-12-12
  • Updated: 2016-12-15
  • Resolved: 2014-03-07
Related Reports
Relates :  
Relates :  
Description
We can get deadlock during concurrent class loading of classes from j.l.invoke package. But it happens only if we try to load package-private classes, so it's not possible in a regular java application.

ILW=MLH=>P4


Comments
Loading non-public classes isn't the right way to use JSR292. Closing as "will not fix".
07-03-2014

If you try to load arbitrary non-public classes in arbitrary order concurrently then I expect there are many places in the JDK where you may encounter a deadlock. There are dependencies across classes that mandate initialization only occur from the public classes in, and in some cases by a specific class first. This is why we go to great pains to control the initialization sequence of the core classes during VM initialization. I do not see a defect here.
18-12-2013

after change 131 to 'if (true)', http://cr.openjdk.java.net/~iignatyev/8026941/webrev.00/ can be used as a test to reproduce issue
12-12-2013

one of possible way to get a deadlock to load classes in 4 threads in the next way: Thread #0: java.lang.invoke.MethodType java.lang.invoke.MethodHandleNatives java.lang.invoke.LambdaForm java.lang.invoke.MemberName java.lang.invoke.LambdaForm$Compiled java.lang.invoke.MethodHandleImpl$AsVarargsCollector java.lang.invoke.DontInline java.lang.invoke.DirectMethodHandle$StaticAccessor java.lang.invoke.SerializedLambda java.lang.invoke.MethodHandleInfo java.lang.invoke.MutableCallSite java.lang.invoke.AbstractValidatingLambdaMetafactory java.lang.invoke.BoundMethodHandle$Factory java.lang.invoke.InnerClassLambdaMetafactory java.lang.invoke.MethodHandleImpl$BindCaller$2 java.lang.invoke.InvokerBytecodeGenerator java.lang.invoke.SimpleMethodHandle java.lang.invoke.BoundMethodHandle java.lang.invoke.CallSite java.lang.invoke.InfoFromMemberName$1 Thread #1: java.lang.invoke.VolatileCallSite java.lang.invoke.MethodHandles$Lookup java.lang.invoke.MethodTypeForm java.lang.invoke.LambdaForm$NamedFunction java.lang.invoke.MethodHandle$PolymorphicSignature java.lang.invoke.MethodHandleImpl$BindCaller$T java.lang.invoke.DirectMethodHandle$EnsureInitialized java.lang.invoke.LambdaMetafactory java.lang.invoke.DirectMethodHandle$Special java.lang.invoke.MethodHandleImpl$GuardWithCatch java.lang.invoke.InvokerBytecodeGenerator$CpPatch java.lang.invoke.DirectMethodHandle java.lang.invoke.MethodHandleImpl$ArrayAccessor java.lang.invoke.BoundMethodHandle$SpeciesData java.lang.invoke.DirectMethodHandle$1 java.lang.invoke.MethodHandleProxies$1 java.lang.invoke.ProxyClassesDumper$1 java.lang.invoke.MethodType$ConcurrentWeakInternSet$WeakEntry java.lang.invoke.InnerClassLambdaMetafactory$2 java.lang.invoke.ConstantCallSite Thread #2: java.lang.invoke.MethodHandleImpl$WrappedMember java.lang.invoke.Stable java.lang.invoke.InvokeDynamic java.lang.invoke.ProxyClassesDumper java.lang.invoke.LambdaConversionException java.lang.invoke.DirectMethodHandle$Accessor java.lang.invoke.DirectMethodHandle$Lazy java.lang.invoke.SwitchPoint java.lang.invoke.MethodType$ConcurrentWeakInternSet java.lang.invoke.MethodHandleProxies java.lang.invoke.MethodHandleImpl$BindCaller$1 java.lang.invoke.TypeConvertingMethodAdapter java.lang.invoke.MethodHandle java.lang.invoke.LambdaForm$Name java.lang.invoke.MemberName$Factory java.lang.invoke.WrongMethodTypeException java.lang.invoke.MethodHandleStatics java.lang.invoke.MethodHandles$1 java.lang.invoke.MethodHandleImpl$1 java.lang.invoke.InnerClassLambdaMetafactory$1 Thread #3: java.lang.invoke.DirectMethodHandle$Constructor java.lang.invoke.MethodHandles java.lang.invoke.ForceInline java.lang.invoke.SerializedLambda$1 java.lang.invoke.BoundMethodHandle$Species_L java.lang.invoke.MethodHandleStatics$1 java.lang.invoke.MethodHandleProxies$2 java.lang.invoke.InnerClassLambdaMetafactory$ForwardingMethodGenerator java.lang.invoke.MethodHandleNatives$Constants java.lang.invoke.Invokers java.lang.invoke.InfoFromMemberName java.lang.invoke.MethodHandleImpl$Lazy java.lang.invoke.MethodHandleImpl java.lang.invoke.MethodHandleImpl$BindCaller java.lang.invoke.InvokerBytecodeGenerator$1 java.lang.invoke.LambdaForm$Hidden
12-12-2013