[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[Nbd] [PATCH 10/11] nbd-server: block SIGCHLD when handling SIGTERM, and visa versa



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: