------------------------------------------------------------ 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);