summaryrefslogtreecommitdiff
path: root/src/rdb.c
diff options
context:
space:
mode:
authorWang Yuan <wangyuancode@163.com>2020-11-03 23:16:11 +0800
committerGitHub <noreply@github.com>2020-11-03 17:16:11 +0200
commit89c78a980807aa1de0a6d0ccde6042450333a783 (patch)
tree1a2c9244af21df3d2d60602bc0dba0c7acc84f7b /src/rdb.c
parentf210e197f3b9d0b4a81c6c354296da8f1ddad513 (diff)
downloadredis-89c78a980807aa1de0a6d0ccde6042450333a783.tar.gz
Disable rehash when redis has child process (#8007)
In redisFork(), we don't set child pid, so updateDictResizePolicy() doesn't take effect, that isn't friendly for copy-on-write. The bug was introduced this in redis 6.0: 56258c6
Diffstat (limited to 'src/rdb.c')
-rw-r--r--src/rdb.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/rdb.c b/src/rdb.c
index db5698c1d..3ea55fa67 100644
--- a/src/rdb.c
+++ b/src/rdb.c
@@ -1412,6 +1412,7 @@ int rdbSaveBackground(char *filename, rdbSaveInfo *rsi) {
server.rdb_save_time_start = time(NULL);
server.rdb_child_pid = childpid;
server.rdb_child_type = RDB_CHILD_TYPE_DISK;
+ updateDictResizePolicy();
return C_OK;
}
return C_OK; /* unreached */
@@ -2618,6 +2619,7 @@ int rdbSaveToSlavesSockets(rdbSaveInfo *rsi) {
server.rdb_save_time_start = time(NULL);
server.rdb_child_pid = childpid;
server.rdb_child_type = RDB_CHILD_TYPE_SOCKET;
+ updateDictResizePolicy();
close(rdb_pipe_write); /* close write in parent so that it can detect the close on the child. */
if (aeCreateFileEvent(server.el, server.rdb_pipe_read, AE_READABLE, rdbPipeReadHandler,NULL) == AE_ERR) {
serverPanic("Unrecoverable error creating server.rdb_pipe_read file event.");