From 09f81768090ffea1dbb0362950b0d5414c609436 Mon Sep 17 00:00:00 2001 From: Pablo Neira Ayuso Date: Fri, 4 Jul 2014 12:24:46 +0200 Subject: mnl: check for NLM_F_DUMP_INTR when dumping object lists This flag allows to detect that an update has ocurred while dumping any of the object lists. In case of interference, nft cancels the netlink socket to skip processing the remaining stale entries and it retries to obtain fresh list of objects. Signed-off-by: Pablo Neira Ayuso --- src/main.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'src/main.c') diff --git a/src/main.c b/src/main.c index a446bc68..30ea2c6c 100644 --- a/src/main.c +++ b/src/main.c @@ -223,8 +223,14 @@ int nft_run(void *scanner, struct parser_state *state, struct list_head *msgs) ret = nft_parse(scanner, state); if (ret != 0 || state->nerrs > 0) return -1; +retry: + ret = nft_netlink(state, msgs); + if (ret < 0 && errno == EINTR) { + netlink_restart(); + goto retry; + } - return nft_netlink(state, msgs); + return ret; } int main(int argc, char * const *argv) -- cgit v1.2.3