diff options
author | Phil Sutter <phil@nwl.cc> | 2017-10-06 12:48:50 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2017-10-24 17:56:32 +0200 |
commit | 6a826591878db3fa9e2a94b87a3d5edd8e0fc442 (patch) | |
tree | 2e2202491027f2c52a45022c75722a77aff7f5c1 /ebtables.c | |
parent | 73c2371744c08c677540d468a588586effecab2d (diff) |
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 <phil@nwl.cc>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'ebtables.c')
-rw-r--r-- | ebtables.c | 8 |
1 files changed, 0 insertions, 8 deletions
@@ -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 : |