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

SIGSEGV in Dependencies::DepStream::argument(int)

    Details

      Description

      Test failed with SIGSEGV during adhoc run:
      #
      # A fatal error has been detected by the Java Runtime Environment:
      #
      # SIGSEGV (0xb) at pc=0x0000000209913275, pid=88596, tid=26887
      #
      # JRE version: Java(TM) SE Runtime Environment (9.0) (fastdebug build 9-internal+0-2016-09-14-185608.mlchung.JDK-8157464-fix)
      # Java VM: Java HotSpot(TM) 64-Bit Server VM (fastdebug 9-internal+0-2016-09-14-185608.mlchung.JDK-8157464-fix, compiled mode, tiered, compressed oops, g1 gc, bsd-amd64)
      # Problematic frame:
      # V [libjvm.dylib+0x496275] Dependencies::DepStream::argument(int)+0xc9
      #
      # Core dump will be written. Default location: /cores/core.88596
      #
      # If you would like to submit a bug report, please visit:
      # http://bugreport.java.com/bugreport/crash.jsp
      #

      hs_err_pid is attached.

        Issue Links

          Activity

          Hide
          dlong Dean Long added a comment -
          [~coleenp] Sorry, I meant ciObjArrayKlass.
          Show
          dlong Dean Long added a comment - [~coleenp] Sorry, I meant ciObjArrayKlass.
          Hide
          coleenp Coleen Phillimore added a comment -
          [~dlong] Does this line create the ciInstanceKlass for the element klass?

          // Constructor for loaded object array klasses.
          ciObjArrayKlass::ciObjArrayKlass(Klass* k) : ciArrayKlass(k) {
            assert(get_Klass()->is_objArray_klass(), "wrong type");
            Klass* element_Klass = get_ObjArrayKlass()->bottom_klass();
            _base_element_klass = CURRENT_ENV->get_klass(element_Klass); <== this guy ?
            assert(_base_element_klass->is_instance_klass() ||
                   _base_element_klass->is_type_array_klass(), "bad base klass");
            if (dimension() == 1) {
              _element_klass = _base_element_klass;
            } else {
              _element_klass = NULL;
            }
            if (!ciObjectFactory::is_initialized()) {
              assert(_element_klass->is_java_lang_Object(), "only arrays of object are shared");
            }
          }

          Would it hit the SATB in the ciInstanceKlass constructor for this compilation? The other ciObjArrayKlass passes the element_klass, which already has the reference kept alive. At least that's what I think it does.
          Show
          coleenp Coleen Phillimore added a comment - [~dlong] Does this line create the ciInstanceKlass for the element klass? // Constructor for loaded object array klasses. ciObjArrayKlass::ciObjArrayKlass(Klass* k) : ciArrayKlass(k) {   assert(get_Klass()->is_objArray_klass(), "wrong type");   Klass* element_Klass = get_ObjArrayKlass()->bottom_klass();   _base_element_klass = CURRENT_ENV->get_klass(element_Klass); <== this guy ?   assert(_base_element_klass->is_instance_klass() ||          _base_element_klass->is_type_array_klass(), "bad base klass");   if (dimension() == 1) {     _element_klass = _base_element_klass;   } else {     _element_klass = NULL;   }   if (!ciObjectFactory::is_initialized()) {     assert(_element_klass->is_java_lang_Object(), "only arrays of object are shared");   } } Would it hit the SATB in the ciInstanceKlass constructor for this compilation? The other ciObjArrayKlass passes the element_klass, which already has the reference kept alive. At least that's what I think it does.
          Hide
          dlong Dean Long added a comment -
          I don't see the ciKlass _base_element_klass getting turned into a ciInstanceKlass anywhere.
          Show
          dlong Dean Long added a comment - I don't see the ciKlass _base_element_klass getting turned into a ciInstanceKlass anywhere.
          Hide
          dlong Dean Long added a comment -
          Nevermind, ciObjectFactory::create_new_metadata() returns the right ci subclass depending on the metadata type.
          Show
          dlong Dean Long added a comment - Nevermind, ciObjectFactory::create_new_metadata() returns the right ci subclass depending on the metadata type.
          Hide
          dlong Dean Long added a comment -
          JDK-8190891 should solve this problem, so closing this as a duplicate.
          Show
          dlong Dean Long added a comment - JDK-8190891 should solve this problem, so closing this as a duplicate.

            People

            • Assignee:
              dlong Dean Long
              Reporter:
              ddmitriev Dmitry Dmitriev
            • Votes:
              0 Vote for this issue
              Watchers:
              6 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: