diff options
author | Nicholas Marriott <nicholas.marriott@gmail.com> | 2013-10-01 23:31:09 +0100 |
---|---|---|
committer | Nicholas Marriott <nicholas.marriott@gmail.com> | 2013-10-01 23:31:09 +0100 |
commit | 7be152412ea0a614df11bce9ba5097574369a5f6 (patch) | |
tree | 3616c5c837eda9e0baff88e809163834761c71a9 | |
parent | d0fa48db1eaea5fc2fa62111c2bfb4836f2b5f03 (diff) | |
download | rtmux-7be152412ea0a614df11bce9ba5097574369a5f6.tar.gz rtmux-7be152412ea0a614df11bce9ba5097574369a5f6.tar.bz2 rtmux-7be152412ea0a614df11bce9ba5097574369a5f6.zip |
Make cmdq->client_exit a tristate (-1 means "not set") so that if explicitly
set it can be copied from child to parent cmdq by if-shell and
source-file. This fixes using attach or new. From Chris Johnsen.
-rw-r--r-- | cmd-if-shell.c | 3 | ||||
-rw-r--r-- | cmd-queue.c | 4 | ||||
-rw-r--r-- | cmd-source-file.c | 3 |
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--; |