diff options
author | Pablo Neira Ayuso <pablo@netfilter.org> | 2012-07-05 00:17:48 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2012-07-05 00:26:11 +0200 |
commit | 8648ae6d08bb84030c2c3519454532f6e04e31d9 (patch) | |
tree | 1bf7bd26ed184eefe3b2ffd7bc2f96ae731a9b97 /src | |
parent | c88266b35ba130e804422ce2fe0da6704d620bd6 (diff) | |
download | conntrack-tools-8648ae6d08bb84030c2c3519454532f6e04e31d9.tar.gz conntrack-tools-8648ae6d08bb84030c2c3519454532f6e04e31d9.zip |
conntrackd: add bugtrap notice in case of flush while commit in progress
Flushing the external cache, ie. conntrackd -f, while commit is in progress
is not allowed anymore, ie. conntrackd -c.
Note that conntrackd -c is synchronous. Thus, it returns control to the
caller once the commit has finished.
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/sync-mode.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/sync-mode.c b/src/sync-mode.c index 10fdb9e..6f8eb04 100644 --- a/src/sync-mode.c +++ b/src/sync-mode.c @@ -608,6 +608,12 @@ static int local_handler_sync(int fd, int type, void *data) } break; case CT_FLUSH_CACHE: + /* if we're still committing, abort this command */ + if (STATE_SYNC(commit).clientfd != -1) { + dlog(LOG_ERR, "ignoring flush command, " + "commit still in progress"); + break; + } /* inmediate flush, remove pending flush scheduled if any */ del_alarm(&STATE_SYNC(reset_cache_alarm)); dlog(LOG_NOTICE, "flushing caches"); @@ -621,6 +627,12 @@ static int local_handler_sync(int fd, int type, void *data) STATE(mode)->internal->ct.flush(); break; case CT_FLUSH_EXT_CACHE: + /* if we're still committing, abort this command */ + if (STATE_SYNC(commit).clientfd != -1) { + dlog(LOG_ERR, "ignoring flush command, " + "commit still in progress"); + break; + } dlog(LOG_NOTICE, "flushing external cache"); STATE_SYNC(external)->ct.flush(); break; @@ -687,6 +699,12 @@ static int local_handler_sync(int fd, int type, void *data) local_commit(fd); break; case ALL_FLUSH_CACHE: + /* if we're still committing, abort this command */ + if (STATE_SYNC(commit).clientfd != -1) { + dlog(LOG_ERR, "ignoring flush command, " + "commit still in progress"); + break; + } dlog(LOG_NOTICE, "flushing caches"); STATE(mode)->internal->ct.flush(); STATE_SYNC(external)->ct.flush(); |