[Nbd] [PATCH 10/11] nbd-server: block SIGCHLD when handling SIGTERM, and visa versa
- To: nbd-general@lists.sourceforge.net
- Subject: [Nbd] [PATCH 10/11] nbd-server: block SIGCHLD when handling SIGTERM, and visa versa
- From: "Dmitry V. Levin" <ldv@...1147...>
- Date: Fri, 22 Jun 2012 01:45:01 +0400
- Message-id: <20120621214501.GJ26247@...1147...>
SIGCHLD handler must be blocked during execution of SIGTERM handler,
and visa versa, because the former changes "children" hash table
iterated by the latter.
Signed-off-by: Dmitry V. Levin <ldv@...1147...>
---
nbd-server.c | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/nbd-server.c b/nbd-server.c
index 0868447..80681c7 100644
--- a/nbd-server.c
+++ b/nbd-server.c
@@ -2454,11 +2454,14 @@ void setup_servers(GArray* servers) {
sa.sa_handler = sigchld_handler;
sigemptyset(&sa.sa_mask);
+ sigaddset(&sa.sa_mask, SIGTERM);
sa.sa_flags = SA_RESTART;
if(sigaction(SIGCHLD, &sa, NULL) == -1)
err("sigaction: %m");
+
sa.sa_handler = sigterm_handler;
sigemptyset(&sa.sa_mask);
+ sigaddset(&sa.sa_mask, SIGCHLD);
sa.sa_flags = SA_RESTART;
if(sigaction(SIGTERM, &sa, NULL) == -1)
err("sigaction: %m");
--
ldv
Reply to: