From 929c686ccee0aacc567a9892931ae46c82a2e8cd Mon Sep 17 00:00:00 2001 From: antirez Date: Tue, 9 Oct 2018 13:18:25 +0200 Subject: [PATCH] Actually use the protectClient() API where needed. Related to #4804. --- src/debug.c | 8 ++++---- src/scripting.c | 9 ++++----- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/debug.c b/src/debug.c index 5a8190c9..8cc53d92 100644 --- a/src/debug.c +++ b/src/debug.c @@ -345,9 +345,9 @@ NULL return; } emptyDb(-1,EMPTYDB_NO_FLAGS,NULL); - aeDeleteFileEvent(server.el,c->fd,AE_READABLE); + protectClient(c); int ret = rdbLoad(server.rdb_filename,NULL); - aeCreateFileEvent(server.el,c->fd,AE_READABLE,readQueryFromClient,c); + unprotectClient(c); if (ret != C_OK) { addReplyError(c,"Error trying to load the RDB dump"); return; @@ -357,9 +357,9 @@ NULL } else if (!strcasecmp(c->argv[1]->ptr,"loadaof")) { if (server.aof_state != AOF_OFF) flushAppendOnlyFile(1); emptyDb(-1,EMPTYDB_NO_FLAGS,NULL); - aeDeleteFileEvent(server.el,c->fd,AE_READABLE); + protectClient(c); int ret = loadAppendOnlyFile(server.aof_filename); - aeCreateFileEvent(server.el,c->fd,AE_READABLE,readQueryFromClient,c); + unprotectClient(c); if (ret != C_OK) { addReply(c,shared.err); return; diff --git a/src/scripting.c b/src/scripting.c index 97915603..260b3679 100644 --- a/src/scripting.c +++ b/src/scripting.c @@ -1242,7 +1242,7 @@ void luaMaskCountHook(lua_State *lua, lua_Debug *ar) { * we need to mask the client executing the script from the event loop. * If we don't do that the client may disconnect and could no longer be * here when the EVAL command will return. */ - aeDeleteFileEvent(server.el, server.lua_caller->fd, AE_READABLE); + protectClient(server.lua_caller); } if (server.lua_timedout) processEventsWhileBlocked(); if (server.lua_kill) { @@ -1370,10 +1370,9 @@ void evalGenericCommand(client *c, int evalsha) { if (delhook) lua_sethook(lua,NULL,0,0); /* Disable hook */ if (server.lua_timedout) { server.lua_timedout = 0; - /* Restore the readable handler that was unregistered when the - * script timeout was detected. */ - aeCreateFileEvent(server.el,c->fd,AE_READABLE, - readQueryFromClient,c); + /* Restore the client that was protected when the script timeout + * was detected. */ + unprotectClient(c); if (server.masterhost && server.master) queueClientForReprocessing(server.master); }