From c912df9afb894bdec9f471ac656ad7896e3dfde3 Mon Sep 17 00:00:00 2001 From: antirez Date: Sat, 14 Nov 2015 22:13:32 +0100 Subject: [PATCH] Lua debugger: call wait3() if there are pending forked debugging sessions. --- src/scripting.c | 6 ++++++ src/server.c | 4 +++- src/server.h | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/scripting.c b/src/scripting.c index 42d161d9..d12adb71 100644 --- a/src/scripting.c +++ b/src/scripting.c @@ -1650,6 +1650,12 @@ int ldbRemoveChild(pid_t pid) { return 0; } +/* Return the number of children we still did not received termination + * acknowledge via wait() in the parent process. */ +int ldbPendingChildren(void) { + return listLength(ldb.children); +} + /* Kill all the forked sessions. */ void ldbKillForkedSessions(void) { listIter li; diff --git a/src/server.c b/src/server.c index 085c156e..bfd17992 100644 --- a/src/server.c +++ b/src/server.c @@ -1171,7 +1171,9 @@ int serverCron(struct aeEventLoop *eventLoop, long long id, void *clientData) { } /* Check if a background saving or AOF rewrite in progress terminated. */ - if (server.rdb_child_pid != -1 || server.aof_child_pid != -1) { + if (server.rdb_child_pid != -1 || server.aof_child_pid != -1 || + ldbPendingChildren()) + { int statloc; pid_t pid; diff --git a/src/server.h b/src/server.h index 268dcd7c..409a9593 100644 --- a/src/server.h +++ b/src/server.h @@ -1446,6 +1446,7 @@ int redis_check_rdb_main(char **argv, int argc); void scriptingInit(int setup); int ldbRemoveChild(pid_t pid); void ldbKillForkedSessions(void); +int ldbPendingChildren(void); /* Blocked clients */ void processUnblockedClients(void);