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

Class loading verification failure if GC occurs in Universe::flush_dependents_on

    XMLWordPrintable

Details

    • Bug
    • Resolution: Fixed
    • P4
    • 9
    • hs25
    • hotspot
    • b04

    Backports

      Description

        If a GC (with verification enabled) occurs during _non-parallel_ class loading in the call chain

        SystemDictionary::add_to_hierarchy => Universe::flush_dependents_on => VM_Deoptimize

        then verification in SystemDictionary::verify_obj_klass_present will fail for the class currently being defined, since it is in the Loaded state but not yet added to the SystemDictionary and not added to the Placeholder table.

        The problem is easy to reproduce by adding a VM_Verify VMop in Universe::flush_dependents_on and running a test which loads classes with a non-PCL ClassLoader.

        I=M (spurious assert with verification, potential race in class loading)
        L=M (occurs only with non-parallel capable class loaders)
        W=H (no known work-around)
        updated ILW:
        I=L (spurious assert with verification, no race in class loading)
        L=M (only with non-parallel capable class loaders)
        W=L (see comments for workaround)

        The code should be deleted - since this verification isn't intended to be true. In addition, there is a comment that should be deleted that says that redefineclasses depends on this - that was my misunderstanding when I put in the comment - but checking with Dan Daugherty and David Holmes, actually redefineclasses can only get to a class in the system dictionary.

        Attachments

          Issue Links

            Activity

              People

                coleenp Coleen Phillimore
                mgerdin Mikael Gerdin (Inactive)
                Votes:
                0 Vote for this issue
                Watchers:
                5 Start watching this issue

                Dates

                  Created:
                  Updated:
                  Resolved: