7021603: crash in fill_sync_handler with ExtendedDTrace probes

Thu, 24 Feb 2011 11:09:16 -0800

author
never
date
Thu, 24 Feb 2011 11:09:16 -0800
changeset 2600
6f3746e69a78
parent 2598
d411927672ed
child 2601
8190d4b75e09

7021603: crash in fill_sync_handler with ExtendedDTrace probes
Reviewed-by: iveresov

src/share/vm/c1/c1_GraphBuilder.cpp file | annotate | diff | comparison | revisions
     1.1 --- a/src/share/vm/c1/c1_GraphBuilder.cpp	Wed Feb 23 19:09:16 2011 -0800
     1.2 +++ b/src/share/vm/c1/c1_GraphBuilder.cpp	Thu Feb 24 11:09:16 2011 -0800
     1.3 @@ -3308,22 +3308,23 @@
     1.4    Value exception = append_with_bci(new ExceptionObject(), SynchronizationEntryBCI);
     1.5    assert(exception->is_pinned(), "must be");
     1.6  
     1.7 +  int bci = SynchronizationEntryBCI;
     1.8    if (compilation()->env()->dtrace_method_probes()) {
     1.9 -    // Report exit from inline methods
    1.10 +    // Report exit from inline methods.  We don't have a stream here
    1.11 +    // so pass an explicit bci of SynchronizationEntryBCI.
    1.12      Values* args = new Values(1);
    1.13 -    args->push(append(new Constant(new ObjectConstant(method()))));
    1.14 -    append(new RuntimeCall(voidType, "dtrace_method_exit", CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_exit), args));
    1.15 +    args->push(append_with_bci(new Constant(new ObjectConstant(method())), bci));
    1.16 +    append_with_bci(new RuntimeCall(voidType, "dtrace_method_exit", CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_exit), args), bci);
    1.17    }
    1.18  
    1.19 -  int bci = SynchronizationEntryBCI;
    1.20    if (lock) {
    1.21      assert(state()->locks_size() > 0 && state()->lock_at(state()->locks_size() - 1) == lock, "lock is missing");
    1.22      if (!lock->is_linked()) {
    1.23 -      lock = append_with_bci(lock, -1);
    1.24 +      lock = append_with_bci(lock, bci);
    1.25      }
    1.26  
    1.27      // exit the monitor in the context of the synchronized method
    1.28 -    monitorexit(lock, SynchronizationEntryBCI);
    1.29 +    monitorexit(lock, bci);
    1.30  
    1.31      // exit the context of the synchronized method
    1.32      if (!default_handler) {

mercurial