summaryrefslogtreecommitdiffstats
path: root/cmd-source-file.c
diff options
context:
space:
mode:
authornicm <nicm>2016-10-14 18:41:53 +0000
committernicm <nicm>2016-10-14 18:41:53 +0000
commit1721d1994eb03beb8217fa3e61ed0cc097dd899e (patch)
tree43e7b2ac7cfbfee0b83cb80f59133d9ee9e65f0f /cmd-source-file.c
parent0ec18e537d7f67732a789c0984bc1cb89dbb0adf (diff)
source-file and some other commands can recurse back into cmdq_continue,
which could potentially free the currently running command, so we need to take a reference to it in cmdq_continue_one. Fixes problem reported by Theo Buehler.
Diffstat (limited to 'cmd-source-file.c')
-rw-r--r--cmd-source-file.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/cmd-source-file.c b/cmd-source-file.c
index 0f299ddf..336a79e6 100644
--- a/cmd-source-file.c
+++ b/cmd-source-file.c
@@ -68,6 +68,8 @@ cmd_source_file_exec(struct cmd *self, struct cmd_q *cmdq)
return (CMD_RETURN_NORMAL);
}
+ log_debug("%s: cmdq %p, parent %p", __func__, cmdq1, cmdq);
+
cmdq->references++;
cfg_references++;
@@ -80,16 +82,15 @@ cmd_source_file_done(struct cmd_q *cmdq1)
{
struct cmd_q *cmdq = cmdq1->data;
+ log_debug("%s: cmdq %p, parent %p", __func__, cmdq1, cmdq);
+
if (cmdq1->client_exit >= 0)
cmdq->client_exit = cmdq1->client_exit;
-
cmdq_free(cmdq1);
cfg_references--;
-
if (cmdq_free(cmdq))
return;
-
if (cfg_references == 0)
cfg_print_causes(cmdq);
cmdq_continue(cmdq);