summaryrefslogtreecommitdiffstats
path: root/libiptc/libiptc.c
diff options
context:
space:
mode:
author/C=EU/ST=EU/CN=Patrick McHardy/emailAddress=kaber@trash.net </C=EU/ST=EU/CN=Patrick McHardy/emailAddress=kaber@trash.net>2008-04-02 12:01:53 +0000
committer/C=EU/ST=EU/CN=Patrick McHardy/emailAddress=kaber@trash.net </C=EU/ST=EU/CN=Patrick McHardy/emailAddress=kaber@trash.net>2008-04-02 12:01:53 +0000
commit6a01f63242c770bf2e9f01ac0d9410d0cb5b55a5 (patch)
tree8e11798d6ce952eb81e3b7e58def210d6fffff48 /libiptc/libiptc.c
parenta44b32aef64738c60c8a197968306efb55b89304 (diff)
Retry ruleset dump when kernel returns EAGAIN.
Bugzilla #104
Diffstat (limited to 'libiptc/libiptc.c')
-rw-r--r--libiptc/libiptc.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/libiptc/libiptc.c b/libiptc/libiptc.c
index b7bf785..277ca0f 100644
--- a/libiptc/libiptc.c
+++ b/libiptc/libiptc.c
@@ -1226,7 +1226,7 @@ TC_INIT(const char *tablename)
return NULL;
}
sockfd_use++;
-
+retry:
s = sizeof(info);
strcpy(info.name, tablename);
@@ -1279,6 +1279,9 @@ TC_INIT(const char *tablename)
return h;
error:
TC_FREE(&h);
+ /* A different process changed the ruleset size, retry */
+ if (errno == EAGAIN)
+ goto retry;
return NULL;
}