From 1721d1994eb03beb8217fa3e61ed0cc097dd899e Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 14 Oct 2016 18:41:53 +0000 Subject: 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. --- cmd-source-file.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'cmd-source-file.c') 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); -- cgit v1.2.3