We didn't file any bugs because I don't remember finding anything specific, other than "gosh that code is scary" and "I wish we didn't have to do this".

If you find a null 'm' below and call m->print() is the method "obsolete"?

Coleen

On 4/30/14, 8:24 PM, Jeremy Manson wrote:
Did the new bugs get filed for this?

I'm triggering this check with a redefined class (from the bootclasspath, if that matters). To investigate it a little, I instrumented StackTraceElement::create thus:

oop java_lang_StackTraceElement::create(methodHandle method, int bci, TRAPS) {
  Handle mirror (THREAD, method->method_holder()->java_mirror());
  int method_id = method->method_idnum();

  InstanceKlass* holder = method->method_holder();
  Method* m = holder->method_with_idnum(method_id);
  Method* mp = holder->find_method(method->name(), method->signature());
  method->print_name();
fprintf(stderr, " method = %p id = %d method' = %p \n", m, method_id, mp); return create(mirror, method_id, method->constants()->version(), bci, THREAD);
}

m is null, and mp isn't. method->print_name works fine. This makes me feel that the idnum array is out of date somehow. Before I go down the rabbit hole and try to figure out why that is, does someone else know why?

Thanks!

Jeremy



On Thu, Oct 3, 2013 at 11:02 AM, Coleen Phillimore <coleen.phillim...@oracle.com <mailto:coleen.phillim...@oracle.com>> wrote:

    Summary: Redefined class in stack trace may not be found by
    method_idnum so handle null.

    This is a simple change.  I had another change to save the method
    name (as u2) in the backtrace, but it's not worth the extra
    footprint in backtraces for this rare case.

    The root problem was that we save method_idnum in the backtrace
    (u2) instead of Method* to avoid Method* from being redefined and
    deallocated.  I made a change to
    InstanceKlass::method_from_idnum() to return null rather than the
    last method in the list, which causes this crash. Dan and I went
    down the long rabbit-hole of why method_idnum is changed for
    obsolete methods and we think there's some cleanup and potential
    bugs in this area.  But this is not that change.  I'll file
    another bug to continue this investigation for jdk9 (or 8uN).

    Staffan created a test - am including core-libs for the review
    request.  Also tested with all of the vm testbase tests, mlvm
    tests, and java/lang/instrument tests.

    open webrev at http://cr.openjdk.java.net/~coleenp/8025238/
    <http://cr.openjdk.java.net/%7Ecoleenp/8025238/>
    bug link https://bugs.openjdk.java.net/browse/JDK-8025238

    test case for jdk8 repository:

    open webrev at http://cr.openjdk.java.net/~coleenp/8025238_jdk
    <http://cr.openjdk.java.net/%7Ecoleenp/8025238_jdk>

    Thanks,
    Coleen



Reply via email to