List:Commits« Previous MessageNext Message »
From:msvensson Date:May 19 2006 11:07am
Subject:bk commit into 4.1 tree (msvensson:1.2472) BUG#15869
View as plain text  
Below is the list of changes that have just been committed into a local
4.1 repository of msvensson. When msvensson does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet
  1.2472 06/05/19 13:07:24 msvensson@neptunus.(none) +2 -0
  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

  sql/mysqld.cc
    1.612 06/05/19 13:07:20 msvensson@neptunus.(none) +2 -1
    Don't call my_sigset if signo is 0 

  include/my_pthread.h
    1.82 06/05/19 13:07:20 msvensson@neptunus.(none) +4 -2
    Check return value from sigaction with a DBUG_ASSERT
    Also DBUG_ASSERT if signal number 0 is passed

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	msvensson
# Host:	neptunus.(none)
# Root:	/home/msvensson/mysql/my41-bug13711

--- 1.81/include/my_pthread.h	2005-10-11 18:12:09 +02:00
+++ 1.82/include/my_pthread.h	2006-05-19 13:07:20 +02:00
@@ -329,12 +329,14 @@
   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))

--- 1.611/sql/mysqld.cc	2006-04-13 12:06:37 +02:00
+++ 1.612/sql/mysqld.cc	2006-05-19 13:07:20 +02:00
@@ -884,7 +884,8 @@
     RETURN_FROM_KILL_SERVER;
   kill_in_progress=TRUE;
   abort_loop=1;					// This should be set
-  my_sigset(sig,SIG_IGN);
+  if (sig != 0) // 0 is not a valid signal number
+    my_sigset(sig,SIG_IGN);
   if (sig == MYSQL_KILL_SIGNAL || sig == 0)
     sql_print_information(ER(ER_NORMAL_SHUTDOWN),my_progname);
   else
Thread
bk commit into 4.1 tree (msvensson:1.2472) BUG#15869msvensson19 May