Mercurial > hg > truffle
diff src/share/vm/runtime/deoptimization.cpp @ 17795:a9becfeecd1b
Merge
author | kvn |
---|---|
date | Wed, 22 Jan 2014 17:42:23 -0800 |
parents | 69dc1be43fce 2b8e28fdf503 |
children | 8a9bb7821e28 62c54fcc0a35 |
line wrap: on
line diff
--- a/src/share/vm/runtime/deoptimization.cpp Thu Jan 16 14:25:51 2014 +0100 +++ b/src/share/vm/runtime/deoptimization.cpp Wed Jan 22 17:42:23 2014 -0800 @@ -1227,9 +1227,19 @@ load_class_by_index(constant_pool, index, THREAD); if (HAS_PENDING_EXCEPTION) { // Exception happened during classloading. We ignore the exception here, since it - // is going to be rethrown since the current activation is going to be deoptimzied and + // is going to be rethrown since the current activation is going to be deoptimized and // the interpreter will re-execute the bytecode. CLEAR_PENDING_EXCEPTION; + // Class loading called java code which may have caused a stack + // overflow. If the exception was thrown right before the return + // to the runtime the stack is no longer guarded. Reguard the + // stack otherwise if we return to the uncommon trap blob and the + // stack bang causes a stack overflow we crash. + assert(THREAD->is_Java_thread(), "only a java thread can be here"); + JavaThread* thread = (JavaThread*)THREAD; + bool guard_pages_enabled = thread->stack_yellow_zone_enabled(); + if (!guard_pages_enabled) guard_pages_enabled = thread->reguard_stack(); + assert(guard_pages_enabled, "stack banging in uncommon trap blob may cause crash"); } }