217 public: |
217 public: |
218 ThreadInVMfromJava(JavaThread* thread) : ThreadStateTransition(thread) { |
218 ThreadInVMfromJava(JavaThread* thread) : ThreadStateTransition(thread) { |
219 trans_from_java(_thread_in_vm); |
219 trans_from_java(_thread_in_vm); |
220 } |
220 } |
221 ~ThreadInVMfromJava() { |
221 ~ThreadInVMfromJava() { |
|
222 if (_thread->stack_yellow_reserved_zone_disabled()) { |
|
223 _thread->enable_stack_yellow_reserved_zone(); |
|
224 } |
222 trans(_thread_in_vm, _thread_in_Java); |
225 trans(_thread_in_vm, _thread_in_Java); |
223 // Check for pending. async. exceptions or suspends. |
226 // Check for pending. async. exceptions or suspends. |
224 if (_thread->has_special_runtime_exit_condition()) _thread->handle_special_runtime_exit_condition(); |
227 if (_thread->has_special_runtime_exit_condition()) _thread->handle_special_runtime_exit_condition(); |
225 } |
228 } |
226 }; |
229 }; |
304 public: |
307 public: |
305 ThreadInVMfromJavaNoAsyncException(JavaThread* thread) : ThreadStateTransition(thread) { |
308 ThreadInVMfromJavaNoAsyncException(JavaThread* thread) : ThreadStateTransition(thread) { |
306 trans_from_java(_thread_in_vm); |
309 trans_from_java(_thread_in_vm); |
307 } |
310 } |
308 ~ThreadInVMfromJavaNoAsyncException() { |
311 ~ThreadInVMfromJavaNoAsyncException() { |
|
312 if (_thread->stack_yellow_reserved_zone_disabled()) { |
|
313 _thread->enable_stack_yellow_reserved_zone(); |
|
314 } |
309 trans(_thread_in_vm, _thread_in_Java); |
315 trans(_thread_in_vm, _thread_in_Java); |
310 // NOTE: We do not check for pending. async. exceptions. |
316 // NOTE: We do not check for pending. async. exceptions. |
311 // If we did and moved the pending async exception over into the |
317 // If we did and moved the pending async exception over into the |
312 // pending exception field, we would need to deopt (currently C2 |
318 // pending exception field, we would need to deopt (currently C2 |
313 // only). However, to do so would require that we transition back |
319 // only). However, to do so would require that we transition back |
314 // to the _thread_in_vm state. Instead we postpone the handling of |
320 // to the _thread_in_vm state. Instead we postpone the handling of |
315 // the async exception. |
321 // the async exception. |
316 |
322 |
|
323 |
317 // Check for pending. suspends only. |
324 // Check for pending. suspends only. |
318 if (_thread->has_special_runtime_exit_condition()) |
325 if (_thread->has_special_runtime_exit_condition()) |
319 _thread->handle_special_runtime_exit_condition(false); |
326 _thread->handle_special_runtime_exit_condition(false); |
320 } |
327 } |
321 }; |
328 }; |