From 6a826591878db3fa9e2a94b87a3d5edd8e0fc442 Mon Sep 17 00:00:00 2001 From: Phil Sutter Date: Fri, 6 Oct 2017 12:48:50 +0200 Subject: Use flock() for --concurrent option The previous locking mechanism was not atomic, hence it was possible that a killed ebtables process would leave the lock file in place which in turn made future ebtables processes wait indefinitely for the lock to become free. Fix this by using flock(). This also simplifies code quite a bit because there is no need for a custom signal handler or an __exit routine anymore. Signed-off-by: Phil Sutter Signed-off-by: Pablo Neira Ayuso --- ebtables.c | 8 -------- 1 file changed, 8 deletions(-) (limited to 'ebtables.c') diff --git a/ebtables.c b/ebtables.c index 62f1ba8..f7dfccf 100644 --- a/ebtables.c +++ b/ebtables.c @@ -528,12 +528,6 @@ void ebt_early_init_once() ebt_iterate_targets(merge_target); } -/* signal handler, installed when the option --concurrent is specified. */ -static void sighandler(int signum) -{ - exit(-1); -} - /* We use exec_style instead of #ifdef's because ebtables.so is a shared object. */ int do_command(int argc, char *argv[], int exec_style, struct ebt_u_replace *replace_) @@ -1047,8 +1041,6 @@ big_iface_length: strcpy(replace->filename, optarg); break; case 13 : /* concurrent */ - signal(SIGINT, sighandler); - signal(SIGTERM, sighandler); use_lockfd = 1; break; case 1 : -- cgit v1.2.3