From 5ceb394fe22182055cb16b99bec3c6fe6b1dc3d8 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 19 May 2006 13:07:24 +0200 Subject: 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 --- include/my_pthread.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'include/my_pthread.h') diff --git a/include/my_pthread.h b/include/my_pthread.h index b6b65d4389a..8d03de49574 100644 --- a/include/my_pthread.h +++ b/include/my_pthread.h @@ -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)) -- cgit v1.2.1