[PATCH iptables] xtables: use exponential delay when waiting for xtables lock

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

 



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



[Index of Archives]     [Netfitler Users]     [LARTC]     [Bugtraq]     [Yosemite Forum]

  Powered by Linux