summaryrefslogtreecommitdiffstats
path: root/usr.bin/tmux/cmd-queue.c
diff options
context:
space:
mode:
authornicm <nicm@openbsd.org>2015-02-12 09:56:19 +0000
committernicm <nicm@openbsd.org>2015-02-12 09:56:19 +0000
commitf3cceb5b9e53fcc10f015d8b2ed42c84d9b0451d (patch)
tree9305f9d57502465eb524702cf57b0d740039eebe /usr.bin/tmux/cmd-queue.c
parentDon't clear ICRNL when editing mode is off, so that character local echo (diff)
downloadwireguard-openbsd-f3cceb5b9e53fcc10f015d8b2ed42c84d9b0451d.tar.xz
wireguard-openbsd-f3cceb5b9e53fcc10f015d8b2ed42c84d9b0451d.zip
Take a reference to prevent cmdq being freed during the command. Can
happen to cfg_cmd_q (possibly others) when source-file recurses into cmdq_continue. Fixes bug reported by Ismail Donmez and Theo Buehler.
Diffstat (limited to 'usr.bin/tmux/cmd-queue.c')
-rw-r--r--usr.bin/tmux/cmd-queue.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/usr.bin/tmux/cmd-queue.c b/usr.bin/tmux/cmd-queue.c
index d357fca1daa..bd400d70080 100644
--- a/usr.bin/tmux/cmd-queue.c
+++ b/usr.bin/tmux/cmd-queue.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: cmd-queue.c,v 1.21 2015/02/05 10:26:29 nicm Exp $ */
+/* $OpenBSD: cmd-queue.c,v 1.22 2015/02/12 09:56:19 nicm Exp $ */
/*
* Copyright (c) 2013 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -163,6 +163,7 @@ cmdq_continue(struct cmd_q *cmdq)
int empty, flags;
char s[1024];
+ cmdq->references++;
notify_disable();
empty = TAILQ_EMPTY(&cmdq->queue);
@@ -220,11 +221,13 @@ empty:
if (cmdq->client_exit > 0)
cmdq->client->flags |= CLIENT_EXIT;
if (cmdq->emptyfn != NULL)
- cmdq->emptyfn(cmdq); /* may free cmdq */
+ cmdq->emptyfn(cmdq);
empty = 1;
out:
notify_enable();
+ cmdq_free(cmdq);
+
return (empty);
}