src/share/vm/runtime/sharedRuntime.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Cdiff src/share/vm/runtime/sharedRuntime.cpp

src/share/vm/runtime/sharedRuntime.cpp

Print this page

        

*** 3082,3142 **** thread->set_reserved_stack_activation(thread->stack_base()); JRT_END frame SharedRuntime::look_for_reserved_stack_annotated_method(JavaThread* thread, frame fr) { frame activation; ! int decode_offset = 0; ! nmethod* nm = NULL; ! frame prv_fr = fr; int count = 1; assert(fr.is_java_frame(), "Must start on Java frame"); ! while (!fr.is_first_frame()) { Method* method = NULL; - // Compiled java method case. - if (decode_offset != 0) { - DebugInfoReadStream stream(nm, decode_offset); - decode_offset = stream.read_int(); - method = (Method*)nm->metadata_at(stream.read_int()); - } else { - if (fr.is_first_java_frame()) break; - address pc = fr.pc(); - prv_fr = fr; if (fr.is_interpreted_frame()) { method = fr.interpreter_frame_method(); - fr = fr.java_sender(); } else { CodeBlob* cb = fr.cb(); ! fr = fr.java_sender(); ! if (cb == NULL || !cb->is_nmethod()) { ! continue; ! } ! nm = (nmethod*)cb; ! if (nm->method()->is_native()) { method = nm->method(); - } else { - PcDesc* pd = nm->pc_desc_at(pc); - assert(pd != NULL, "PcDesc must not be NULL"); - decode_offset = pd->scope_decode_offset(); - // if decode_offset is not equal to 0, it will execute the - // "compiled java method case" at the beginning of the loop. - continue; } } ! } ! if (method->has_reserved_stack_access()) { ResourceMark rm(thread); ! activation = prv_fr; warning("Potentially dangerous stack overflow in " "ReservedStackAccess annotated method %s [%d]", method->name_and_sig_as_C_string(), count++); EventReservedStackActivation event; if (event.should_commit()) { event.set_method(method); event.commit(); } } } return activation; } --- 3082,3123 ---- thread->set_reserved_stack_activation(thread->stack_base()); JRT_END frame SharedRuntime::look_for_reserved_stack_annotated_method(JavaThread* thread, frame fr) { frame activation; ! CompiledMethod* nm = NULL; int count = 1; assert(fr.is_java_frame(), "Must start on Java frame"); ! while (true) { Method* method = NULL; if (fr.is_interpreted_frame()) { method = fr.interpreter_frame_method(); } else { CodeBlob* cb = fr.cb(); ! if (cb != NULL && cb->is_compiled()) { ! nm = cb->as_compiled_method(); method = nm->method(); } } ! if ((method != NULL) && method->has_reserved_stack_access()) { ResourceMark rm(thread); ! activation = fr; warning("Potentially dangerous stack overflow in " "ReservedStackAccess annotated method %s [%d]", method->name_and_sig_as_C_string(), count++); EventReservedStackActivation event; if (event.should_commit()) { event.set_method(method); event.commit(); } } + if (fr.is_first_java_frame()) { + break; + } else { + fr = fr.java_sender(); + } } return activation; }
src/share/vm/runtime/sharedRuntime.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File