summaryrefslogtreecommitdiff
path: root/src/server.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/server.c')
-rw-r--r--src/server.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/server.c b/src/server.c
index fd65bb182..b1865e530 100644
--- a/src/server.c
+++ b/src/server.c
@@ -2421,8 +2421,15 @@ void call(client *c, int flags) {
/* If the client is in the context of a transaction, reply with
* +QUEUED and just accumulate the command in the client transaction
- * commands vector. */
- if (c->flags & CLIENT_MULTI &&
+ * commands vector.
+ *
+ * Note that CALL_NOQUEUE can override this check and execute the command
+ * straight away even if the client is in "MULTI" state. This is useful
+ * every time we want to actually execute commands even if the client is
+ * in MULTI state, like in scripting.c or in the implementation of EXEC
+ * itself. */
+ if (!(flags & CMD_CALL_NOQUEUE) &&
+ c->flags & CLIENT_MULTI &&
c->cmd->proc != execCommand && c->cmd->proc != discardCommand &&
c->cmd->proc != multiCommand && c->cmd->proc != watchCommand)
{