aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmd-if-shell.c3
-rw-r--r--cmd-queue.c4
-rw-r--r--cmd-source-file.c3
3 files changed, 8 insertions, 2 deletions
diff --git a/cmd-if-shell.c b/cmd-if-shell.c
index a074341b..9b6dcf30 100644
--- a/cmd-if-shell.c
+++ b/cmd-if-shell.c
@@ -147,6 +147,9 @@ cmd_if_shell_done(struct cmd_q *cmdq1)
struct cmd_if_shell_data *cdata = cmdq1->data;
struct cmd_q *cmdq = cdata->cmdq;
+ if (cmdq1->client_exit >= 0)
+ cmdq->client_exit = cmdq1->client_exit;
+
if (!cmdq_free(cmdq) && !cdata->bflag)
cmdq_continue(cmdq);
diff --git a/cmd-queue.c b/cmd-queue.c
index 38a88d23..19d98190 100644
--- a/cmd-queue.c
+++ b/cmd-queue.c
@@ -35,7 +35,7 @@ cmdq_new(struct client *c)
cmdq->dead = 0;
cmdq->client = c;
- cmdq->client_exit = 0;
+ cmdq->client_exit = -1;
TAILQ_INIT(&cmdq->queue);
cmdq->item = NULL;
@@ -259,7 +259,7 @@ cmdq_continue(struct cmd_q *cmdq)
} while (cmdq->item != NULL);
empty:
- if (cmdq->client_exit)
+ if (cmdq->client_exit > 0)
cmdq->client->flags |= CLIENT_EXIT;
if (cmdq->emptyfn != NULL)
cmdq->emptyfn(cmdq); /* may free cmdq */
diff --git a/cmd-source-file.c b/cmd-source-file.c
index d636643d..eb7e1490 100644
--- a/cmd-source-file.c
+++ b/cmd-source-file.c
@@ -95,6 +95,9 @@ cmd_source_file_done(struct cmd_q *cmdq1)
{
struct cmd_q *cmdq = cmdq1->data;
+ if (cmdq1->client_exit >= 0)
+ cmdq->client_exit = cmdq1->client_exit;
+
cmdq_free(cmdq1);
cfg_references--;