RFR 8159284: bigapps/Jetty - assert(jfa->last_Java_sp() > sp()) failed with tracing code in use

Coleen Phillimore coleen.phillimore at oracle.com
Tue Aug 2 14:51:43 UTC 2016



On 8/1/16 9:39 PM, dean.long at oracle.com wrote:
> Upon a closer look, it appears that the backtraces we get for a crash 
> come from print_native_stack() in debug.cpp, and that code uses a 
> slightly different algorithm, so your changes shouldn't affect it.

yes, it shouldn't affect it.  It's basically moving the condition in the 
assert from sender_for_entry_frame() into safe_for_sender by way of a 
entry_frame_is_safe() function where I consolidated the duplicated code.

The stack traces in vframeStream don't call safe_for_sender(), it's only 
used for profiling ie. AsyncGetCallTrace, where it may not be safe.   
Unless there's a call path I don't see.

Thanks,
Coleen

>
> dl
>
>
> On 8/1/16 6:11 PM, dean.long at oracle.com wrote:
>> Hi Coleen.  If I understand correctly, previously we would get 
>> backtraces that end with the first C frame:
>>
>> [...]
>> J 3335 C1 java.lang.Thread.run()V java.base at 9-ea (17 bytes) @ 
>> 0xe7fdc480 [0xe7fdc420+0x00000060]
>> v  ~StubRoutines::call_stub
>> V  [libjvm.so+0x66fe39]  JavaCalls::call_helper(JavaValue*, 
>> methodHandle const&, JavaCallArguments*, Thread*)+0x2b9
>> V  [libjvm.so+0x931669]  os::os_exception_wrapper(void 
>> (*)(JavaValue*, methodHandle const&, JavaCallArguments*, Thread*), 
>> JavaValue*, methodHandle const&, JavaCallArguments*, Thread*)+0x19
>> V  [libjvm.so+0x66eb2b]  JavaCalls::call_virtual(JavaValue*, Handle, 
>> KlassHandle, Symbol*, Symbol*, Thread*)+0x13b
>> V  [libjvm.so+0x708069]  thread_entry(JavaThread*, Thread*)+0x89
>> V  [libjvm.so+0xaa5434]  JavaThread::thread_main_inner()+0xf4
>> V  [libjvm.so+0xaa5589]  JavaThread::run()+0x119
>> V  [libjvm.so+0x933cdc]  thread_native_entry(Thread*)+0x10c
>> C  [libpthread.so.0+0x6bc9]
>> C  [libc.so.6+0xe2c9e]  clone+0x5e
>>
>>
>> but now with your change, won't all backtraces end on the last Java 
>> frame?  So the above backtrace would be truncated to:
>>
>> [...]
>> J 3335 C1 java.lang.Thread.run()V java.base at 9-ea (17 bytes) @ 
>> 0xe7fdc480 [0xe7fdc420+0x00000060]
>>
>>
>> dl
>>
>> On 8/1/16 4:38 PM, Coleen Phillimore wrote:
>>> Summary: Test condition in assert in frame::safe_for_sender() for 
>>> entry frames and return false.
>>>
>>> This bug is for a confidential part of the project that needs more 
>>> robustness checks to verify that frame::sender() can be called.
>>>
>>> Also refactored into frame::entry_frame_is_safe() because these 
>>> platforms had the same code for entry frames to determine whether it 
>>> is still safe to trust this frame to call sender(). These platforms 
>>> had also the same assert in sender_for_entry_frame() that the 
>>> sampling code hit.
>>>
>>> Tested with our nightly tests on all platforms and bigapps/Jetty.
>>>
>>> open webrev at http://cr.openjdk.java.net/~coleenp/8159284.01/webrev
>>>
>>> Thanks,
>>> Coleen
>>>
>>
>



More information about the hotspot-dev mailing list