summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@netfilter.org>2010-02-17 00:39:44 +0100
committerPablo Neira Ayuso <pablo@netfilter.org>2010-02-17 00:39:44 +0100
commit13c612efc51cf5f8d58423c59323df13739315d6 (patch)
tree225315aa888bacae4f458198934c8089be9c22fd /src
parent8c88b695289c1f3fca604a30e3ca59dd1c957377 (diff)
conntrackd: fix `conntrackd -c' if external cache is disabled
This patch fixes a hung that occurs if you invoke `conntrackd -c' and you have disabled the external cache. Note that `conntrackd -c' does nothing since there is no entries in the external cache to be committed. Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src')
-rw-r--r--src/external_cache.c4
-rw-r--r--src/external_inject.c4
-rw-r--r--src/sync-mode.c4
3 files changed, 7 insertions, 5 deletions
diff --git a/src/external_cache.c b/src/external_cache.c
index c70c818..c1181dc 100644
--- a/src/external_cache.c
+++ b/src/external_cache.c
@@ -88,9 +88,11 @@ static void external_cache_dump(int fd, int type)
cache_dump(external, fd, type);
}
-static void external_cache_commit(struct nfct_handle *h, int fd)
+static int external_cache_commit(struct nfct_handle *h, int fd)
{
cache_commit(external, h, fd);
+ /* Keep the client socket open, we want synchronous commits. */
+ return LOCAL_RET_STOLEN;
}
static void external_cache_flush(void)
diff --git a/src/external_inject.c b/src/external_inject.c
index a54bb13..56e24a3 100644
--- a/src/external_inject.c
+++ b/src/external_inject.c
@@ -145,8 +145,10 @@ static void external_inject_dump(int fd, int type)
{
}
-static void external_inject_commit(struct nfct_handle *h, int fd)
+static int external_inject_commit(struct nfct_handle *h, int fd)
{
+ /* close the commit socket. */
+ return LOCAL_RET_OK;
}
static void external_inject_flush(void)
diff --git a/src/sync-mode.c b/src/sync-mode.c
index ecc2f0d..c12a34a 100644
--- a/src/sync-mode.c
+++ b/src/sync-mode.c
@@ -497,9 +497,7 @@ static int local_handler_sync(int fd, int type, void *data)
del_alarm(&STATE_SYNC(reset_cache_alarm));
dlog(LOG_NOTICE, "committing external cache");
- STATE_SYNC(external)->commit(STATE_SYNC(commit).h, fd);
- /* Keep the client socket open, we want synchronous commits. */
- ret = LOCAL_RET_STOLEN;
+ ret = STATE_SYNC(external)->commit(STATE_SYNC(commit).h, fd);
break;
case RESET_TIMERS:
if (!alarm_pending(&STATE_SYNC(reset_cache_alarm))) {