JDK-8022595 : JSR292: deadlock during class loading of MethodHandles, MethodHandleImpl & MethodHandleNatives
  • Type: Bug
  • Component: core-libs
  • Sub-Component: java.lang.invoke
  • Affected Version: 8
  • Priority: P3
  • Status: Closed
  • Resolution: Fixed
  • Submitted: 2013-08-08
  • Updated: 2016-02-24
  • Resolved: 2013-09-10
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 8 Other
8 b107Fixed hs25Fixed
Related Reports
Relates :  
Relates :  
Relates :  
Description
Intermittent deadlock during class loading of MethodHandles, MethodHandleImpl & MethodHandleNatives.

Stack trace:
"Worker #4/5" #11 prio=5 os_prio=31 tid=0x00007fb9dbad4000 nid=0x6303 in Object.wait() [0x000000019ac6a000]
   java.lang.Thread.State: RUNNABLE
	at java.lang.invoke.MethodHandleNatives.<clinit>(MethodHandleNatives.java:80)
	at Test1_I_S_m.test(Unknown Source)
       ...

"Worker #3/5" #10 prio=5 os_prio=31 tid=0x00007fb9dc156800 nid=0x6103 in Object.wait() [0x000000019ab67000]
   java.lang.Thread.State: RUNNABLE
	at java.lang.invoke.MemberName.<init>(MemberName.java:482)
	at java.lang.invoke.MemberName.<init>(MemberName.java:476)
	at java.lang.invoke.LambdaForm$NamedFunction.<init>(LambdaForm.java:991)
	at java.lang.invoke.MethodHandleImpl.<clinit>(MethodHandleImpl.java:487)
	at java.lang.invoke.MethodHandles.<clinit>(MethodHandles.java:60)
        ...

jdk/src/share/classes/java/lang/invoke/MethodHandleNatives.java:
    75     static {
   ...
    79         // The JVM calls MethodHandleNatives.<clinit>.  Cascade the <clinit> calls as needed:
    80         MethodHandleImpl.initStatics();
    81 }

jdk/src/share/classes/java/lang/invoke/MemberName.java:
   481     public MemberName(Method m, boolean wantSpecial) {
   482         m.getClass();  // NPE check
   483         // fill in vmtarget, vmindex while we have m in hand:
   484         MethodHandleNatives.init(this, m);
Comments
Eric, why did you add noreg-hard keyword? The fix contains regression test.
13-09-2013

RULE vm/runtime/defmeth/scenarios/Stress_noredefine Timeout none
08-08-2013