Commit e7fef1df authored by Vladislav Vaintroub's avatar Vladislav Vaintroub

Fix compilation on Windows, and various Windows related mistakes introduced by

"safe exception patch".
Remove misleading comments suggesting about signal() Windows, the routine here
is part of a exception handler, and sig parameter is an exception code.
parent 54cad2aa
......@@ -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 @@ extern "C" sig_handler handle_fatal_signal(int sig)
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
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment