Rev 753: block alarm signals during critical sections of vacuum in http://samba.org/~tridge/ctdb

tridge at samba.org tridge at samba.org
Wed Jan 9 22:43:15 GMT 2008


------------------------------------------------------------
revno: 753
revision-id:tridge at samba.org-20080109224314-jng6hpo4lbo9y8ls
parent: tridge at samba.org-20080109224244-5g9za2b00oezj7w8
committer: Andrew Tridgell <tridge at samba.org>
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);
 



More information about the samba-cvs mailing list