------------------------------------------------------------
revno: 753
revision-id:[EMAIL PROTECTED]
parent: [EMAIL PROTECTED]
committer: Andrew Tridgell <[EMAIL PROTECTED]>
branch nick: tridge.stable
timestamp: Thu 2008-01-10 09:43:14 +1100
message:
  block alarm signals during critical sections of vacuum
modified:
  common/ctdb_util.c             ctdb_util.c-20061128065342-to93h6eejj5kon81-3
  include/ctdb_private.h         
ctdb_private.h-20061117234101-o3qt14umlg9en8z0-13
  server/ctdbd.c                 ctdbd.c-20070411085044-dqmhr6mfeexnyt4m-1
  tools/ctdb_vacuum.c            ctdb_vacuum.c-20080108053634-3zs2bdddzs4r1e1t-1
=== modified file 'common/ctdb_util.c'
--- a/common/ctdb_util.c        2007-09-21 02:24:02 +0000
+++ b/common/ctdb_util.c        2008-01-09 22:43:14 +0000
@@ -22,6 +22,7 @@
 #include "lib/tdb/include/tdb.h"
 #include "system/network.h"
 #include "system/filesys.h"
+#include "system/wait.h"
 #include "../include/ctdb_private.h"
 
 int LogLevel;
@@ -340,3 +341,21 @@
 {
        return ctdb_same_ip(ip1, ip2) && ip1->sin_port == ip2->sin_port;
 }
+
+
+
+void ctdb_block_signal(int signum)
+{
+       sigset_t set;
+       sigemptyset(&set);
+       sigaddset(&set,signum);
+       sigprocmask(SIG_BLOCK,&set,NULL);
+}
+
+void ctdb_unblock_signal(int signum)
+{
+       sigset_t set;
+       sigemptyset(&set);
+       sigaddset(&set,signum);
+       sigprocmask(SIG_UNBLOCK,&set,NULL);
+}

=== modified file 'include/ctdb_private.h'
--- a/include/ctdb_private.h    2008-01-08 10:28:42 +0000
+++ b/include/ctdb_private.h    2008-01-09 22:43:14 +0000
@@ -1209,5 +1209,7 @@
 
 int32_t ctdb_control_delete_record(struct ctdb_context *ctdb, TDB_DATA indata);
 
+void ctdb_block_signal(int signum);
+void ctdb_unblock_signal(int signum);
 
 #endif

=== modified file 'server/ctdbd.c'
--- a/server/ctdbd.c    2007-11-29 21:44:34 +0000
+++ b/server/ctdbd.c    2008-01-09 22:43:14 +0000
@@ -26,18 +26,6 @@
 #include "cmdline.h"
 #include "../include/ctdb_private.h"
 
-static void block_signal(int signum)
-{
-       struct sigaction act;
-
-       memset(&act, 0, sizeof(act));
-
-       act.sa_handler = SIG_IGN;
-       sigemptyset(&act.sa_mask);
-       sigaddset(&act.sa_mask, signum);
-       sigaction(signum, &act, NULL);
-}
-
 static struct {
        const char *nlist;
        const char *transport;
@@ -149,7 +137,7 @@
                exit(1);
        }
 
-       block_signal(SIGPIPE);
+       ctdb_block_signal(SIGPIPE);
 
        ev = event_context_init(NULL);
 

=== modified file 'tools/ctdb_vacuum.c'
--- a/tools/ctdb_vacuum.c       2008-01-08 21:28:18 +0000
+++ b/tools/ctdb_vacuum.c       2008-01-09 22:43:14 +0000
@@ -208,7 +208,9 @@
                return 0;
        }
 
+       ctdb_block_signal(SIGALRM);
        tdb_delete(ctdb_db->ltdb->tdb, key);
+       ctdb_unblock_signal(SIGALRM);
        tdb_chainunlock(ctdb_db->ltdb->tdb, key);
        free(data.dptr);
 

Reply via email to