ip[6]tables currently waits for 1 second for the xtables lock to be freed if the -w option is used. We have seen that the lock is held much less than that resulting in unnecessary delay when trying to acquire the lock. This problem is even severe in case of latency sensitive applications. Introduce an exponential delay starting from 10ms (experimentally determined) up to a second. Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@xxxxxxxxxxxxxx> --- iptables/xshared.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/iptables/xshared.c b/iptables/xshared.c index 81c2581..d90ac13 100644 --- a/iptables/xshared.c +++ b/iptables/xshared.c @@ -247,6 +247,7 @@ void xs_init_match(struct xtables_match *match) bool xtables_lock(int wait) { int fd, waited = 0, i = 0; + useconds_t base_delay = 10000; fd = open(XT_LOCK_NAME, O_CREAT, 0600); if (fd < 0) @@ -257,10 +258,15 @@ bool xtables_lock(int wait) return true; else if (wait >= 0 && waited >= wait) return false; - if (++i % 2 == 0) + if ((++i % 2 == 0) && (base_delay >= 200000)) fprintf(stderr, "Another app is currently holding the xtables lock; " "waiting (%ds) for it to exit...\n", waited); waited++; - sleep(1); + if (base_delay > 1000000) { + sleep(1); + } else { + usleep(base_delay); + base_delay *= 2; + } } } -- 1.8.2.1 -- To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html