RFR: 8254824: SignalHandlerMark have no purpose

Robbin Ehn robbin.ehn at oracle.com
Fri Oct 30 08:26:00 UTC 2020


Hi Thomas,

The comment was specificity just for the signalhandler scope.
I assumed that any one changing the signal handler would know what
"longjmp away" means any epilogue code will not run.

Since a RAII destructor is much more likely to get missed, I agreed with
David that a reminder of RAII destructors could be useful.

The user of ThreadCrashProtection::call() must take much more 
precaution, very few pieces of code can be called reliable with it.

> IIUC it should not say "don't use RAII" but "in anything you do in all 
> frames between os::ThreadCrashProtection::call() and 
> os::ThreadCrashProtection::check_crash_protection(), don't rely on any 
> epilogue code".

So you have this comment in the declaration:
/*
  * Crash protection for the JfrSampler thread. Wrap the callback
  * with a sigsetjmp and in case of a SIGSEGV/SIGBUS we siglongjmp
  * back.
  * To be able to use this - don't take locks, don't rely on 
destructors,
  * don't make OS library calls, don't allocate memory, don't print,
  * don't call code that could leave the heap / memory in an 
inconsistent state,
  * or anything else where we are not in control if we suddenly jump out.
  */
class ThreadCrashProtection : public StackObj {

https://github.com/openjdk/jdk/blob/379ba80eb7999f60fb12a08a9d0b2ff16263ab23/src/hotspot/os/posix/os_posix.hpp#L115

If you think you can improve the comments feel free to improve!

Thanks, Robbin

> 
> Thanks, Thomas
> 
>     -------------
> 
>     PR: https://git.openjdk.java.net/jdk/pull/677
>     <https://git.openjdk.java.net/jdk/pull/677>
> 


More information about the hotspot-runtime-dev mailing list