--- old/src/share/vm/services/threadService.cpp 2015-10-08 22:16:06.569852566 +0200 +++ new/src/share/vm/services/threadService.cpp 2015-10-08 22:16:06.519853760 +0200 @@ -166,6 +166,7 @@ // If obj == NULL, then ObjectMonitor is raw which doesn't count. } + obj = oopDesc::bs()->write_barrier(obj); Handle h(obj); return h; } @@ -589,6 +590,8 @@ bool ThreadStackTrace::is_owned_monitor_on_stack(oop object) { assert(SafepointSynchronize::is_at_safepoint(), "all threads are stopped"); + object = oopDesc::bs()->write_barrier(object); + bool found = false; int num_frames = get_stack_depth(); for (int depth = 0; depth < num_frames; depth++) { @@ -597,6 +600,7 @@ GrowableArray* locked_monitors = frame->locked_monitors(); for (int j = 0; j < len; j++) { oop monitor = locked_monitors->at(j); + monitor = oopDesc::bs()->write_barrier(monitor); assert(monitor != NULL, "must be a Java object"); if (monitor == object) { found = true;