diff options
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 |
commit | 6a01f63242c770bf2e9f01ac0d9410d0cb5b55a5 (patch) | |
tree | 8e11798d6ce952eb81e3b7e58def210d6fffff48 /libiptc | |
parent | a44b32aef64738c60c8a197968306efb55b89304 (diff) |
Retry ruleset dump when kernel returns EAGAIN.
Bugzilla #104
Diffstat (limited to 'libiptc')
-rw-r--r-- | libiptc/libiptc.c | 5 |
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; } |