@ -28,7 +28,7 @@
# endif
/*
We are handling signals in this file .
We are handling signals / exceptions in this file .
Any global variables we read should be ' volatile sig_atomic_t '
to guarantee that we read some consistent value .
*/
@ -40,20 +40,18 @@ extern volatile sig_atomic_t ld_assume_kernel_is_set;
# endif
/**
* Handler for fatal signals
* Handler for fatal signals on POSIX , exception handler on Windows .
*
* Fatal events ( seg . fault , bus error etc . ) will trigger
* this signal handler . The handler will try to dump relevant
* debugging information to stderr and dump a core image .
*
* Signal handlers can only use a set of ' safe ' system calls
* and library functions . A list of safe calls in POSIX systems
* POSIX : Signal handlers should , if possible , only use a set of ' safe ' system
* calls and library functions . A list of safe calls in POSIX systems
* are available at :
* http : //pubs.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html
* For MS Windows , guidelines are available at :
* http : //msdn.microsoft.com/en-us/library/xdkz3x12(v=vs.71).aspx
*
* @ param sig Signal number
* @ param sig Signal number / Exception code
*/
extern " C " sig_handler handle_fatal_signal ( int sig )
{
@ -77,7 +75,13 @@ extern "C" sig_handler handle_fatal_signal(int sig)
my_safe_printf_stderr ( " %02d%02d%02d %2d:%02d:%02d " ,
tm . tm_year % 100 , tm . tm_mon + 1 , tm . tm_mday ,
tm . tm_hour , tm . tm_min , tm . tm_sec ) ;
if ( opt_expect_abort & & sig = = SIGABRT )
if ( opt_expect_abort
# ifdef _WIN32
& & sig = = EXCEPTION_BREAKPOINT /* __debugbreak in my_sigabrt_hander() */
# else
& & sig = = SIGABRT
# endif
)
{
fprintf ( stderr , " [Note] mysqld did an expected abort \n " ) ;
goto end ;
@ -252,5 +256,7 @@ end:
On Windows , do not terminate , but pass control to exception filter .
*/
_exit ( 1 ) ; // Using _exit(), since exit() is not async signal safe
# else
return ;
# endif
}