mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
Bug#15869 Cannot shutdown the server - it restarts
- A segfault occured when the function 'kill_server' called 'my_sigset' with signal number 0. 'my_sigset' is a macro which uses 'sigaction' to install the signal handler with an invalid signal number will on most platforms return EINVAL but yields a segfauilt on IRIX 6.5 - The server crash was detected by mysqld_safe and it was restarted although a shutdown was requested. - Semantics of kill_server(0) is not known, leaving it intact include/my_pthread.h: Check return value from sigaction with a DBUG_ASSERT Also DBUG_ASSERT if signal number 0 is passed sql/mysqld.cc: Don't call my_sigset if signo is 0
This commit is contained in:
@@ -329,12 +329,14 @@ int sigwait(sigset_t *setp, int *sigp); /* Use our implemention */
|
||||
we want to make sure that no such flags are set.
|
||||
*/
|
||||
#if defined(HAVE_SIGACTION) && !defined(my_sigset)
|
||||
#define my_sigset(A,B) do { struct sigaction s; sigset_t set; \
|
||||
#define my_sigset(A,B) do { struct sigaction s; sigset_t set; int rc; \
|
||||
DBUG_ASSERT((A) != 0); \
|
||||
sigemptyset(&set); \
|
||||
s.sa_handler = (B); \
|
||||
s.sa_mask = set; \
|
||||
s.sa_flags = 0; \
|
||||
sigaction((A), &s, (struct sigaction *) NULL); \
|
||||
rc= sigaction((A), &s, (struct sigaction *) NULL);\
|
||||
DBUG_ASSERT(rc == 0); \
|
||||
} while (0)
|
||||
#elif defined(HAVE_SIGSET) && !defined(my_sigset)
|
||||
#define my_sigset(A,B) sigset((A),(B))
|
||||
|
Reference in New Issue
Block a user