Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8042235

redefining method used by multiple MethodHandles crashes VM

    Details

    • Type: Bug
    • Status: Closed
    • Priority: P1
    • Resolution: Fixed
    • Affects Version/s: 7u45, 8, 9
    • Fix Version/s: 9
    • Component/s: hotspot
    • Subcomponent:
    • Resolved In Build:
      b42
    • CPU:
      generic
    • OS:
      generic
    • Verification:
      Verified

      Backports

        Description

        This is a bug found by [~dnsimon]. The attached test case creates two MethodHandles for the same method, redefines the method and then calls the first created MethodHandle:

                // fooMH2 displaces fooMH1 from the MemberNamesTable
                MethodHandle fooMH1 = lookup.unreflect(fooMethod);
                MethodHandle fooMH2 = lookup.unreflect(fooMethod);

                // Redefining Foo.getName() causes vmtarget to be updated
                // in fooMH2 but not fooMH1
                redefineFoo();

                // Full GC causes fooMH1.vmtarget to be deallocated
                System.gc();

                // Calling fooMH1.vmtarget crashes the VM
                System.out.println("fooMH1.invoke = " + fooMH1.invokeExact());

        The problem is that MemberNameTable only stores the last created MemberName for a given method.

        $ java RedefineMethodUsedByMultipleMethodHandles
        fooMH1.invoke = foo
        fooMH2.invoke = foo
        objc[11873]: Class JavaLaunchHelper is implemented in both /Users/cthaling/build/jdk9/hs-comp/hotspot/jdk-universal/bin/java and /Users/cthaling/build/jdk9/hs-comp/hotspot/jdk-universal/jre/lib/libinstrument.dylib. One of the two will be used. Which one is undefined.
        redefining class RedefineMethodUsedByMultipleMethodHandles$Foo
        replacing "foo" with "bar"
        #
        # A fatal error has been detected by the Java Runtime Environment:
        #
        # SIGSEGV (0xb) at pc=0x0000000000000000, pid=11873, tid=6147
        #
        # JRE version: Java(TM) SE Runtime Environment (9.0-b04) (build 1.9.0-ea-b04)
        # Java VM: Java HotSpot(TM) 64-Bit Server VM (25.0-b62-internal-debug mixed mode bsd-amd64 compressed oops)
        # Problematic frame:
        #
        [error occurred during error reporting (printing problematic frame), id 0xe0000000]

        # Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
        #
        # An error report file with more information is saved as:
        # /Users/cthaling/Downloads/hs_err_pid11873.log
        #
        # If you would like to submit a bug report, please visit:
        # http://bugreport.sun.com/bugreport/crash.jsp
        #
        Current thread is 6147
        Dumping core ...
        Abort trap: 6

          Attachments

            Issue Links

              Activity

                People

                • Assignee:
                  coleenp Coleen Phillimore
                  Reporter:
                  twisti Christian Thalinger
                • Votes:
                  0 Vote for this issue
                  Watchers:
                  8 Start watching this issue

                  Dates

                  • Created:
                    Updated:
                    Resolved: