Thu, 24 Feb 2011 11:09:16 -0800
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) {