equal
deleted
inserted
replaced
376 // here because it does not check for asynchronous exceptions. |
376 // here because it does not check for asynchronous exceptions. |
377 // We have to manage the transition ourself. |
377 // We have to manage the transition ourself. |
378 thread->set_thread_state(_thread_in_native_trans); |
378 thread->set_thread_state(_thread_in_native_trans); |
379 |
379 |
380 // Make sure new state is visible in the GC thread |
380 // Make sure new state is visible in the GC thread |
381 if (os::is_MP()) { |
381 InterfaceSupport::serialize_thread_state(thread); |
382 if (UseMembar) { |
|
383 OrderAccess::fence(); |
|
384 } |
|
385 else { |
|
386 InterfaceSupport::serialize_memory(thread); |
|
387 } |
|
388 } |
|
389 |
382 |
390 // Handle safepoint operations, pending suspend requests, |
383 // Handle safepoint operations, pending suspend requests, |
391 // and pending asynchronous exceptions. |
384 // and pending asynchronous exceptions. |
392 if (SafepointSynchronize::do_call_back() || |
385 if (SafepointSynchronize::do_call_back() || |
393 thread->has_special_condition_for_native_trans()) { |
386 thread->has_special_condition_for_native_trans()) { |