--- old/src/share/vm/runtime/vmThread.cpp 2013-02-19 10:24:50.065114100 +0100 +++ new/src/share/vm/runtime/vmThread.cpp 2013-02-19 10:24:49.784313600 +0100 @@ -383,11 +383,17 @@ op->evaluate(); if (event.should_commit()) { - event.set_operation(op->type()); - event.set_safepoint(op->evaluate_at_safepoint()); - event.set_blocking(!op->evaluate_concurrently()); - event.set_caller(op->calling_thread()->osthread()->thread_id()); - event.commit(); + if (!op->evaluate_concurrently()) { + // Only try to commit vm operation event for non-concurrent vm operations. + // For concurrent vm operations, the caller thread could have exited already. + event.set_operation(op->type()); + event.set_safepoint(op->evaluate_at_safepoint()); + event.set_blocking(true); + event.set_caller(op->calling_thread()->osthread()->thread_id()); + event.commit(); + } else { + event.cancel(); + } } #ifndef USDT2