summaryrefslogtreecommitdiffstats
path: root/usr.bin/ssh/channels.c
diff options
context:
space:
mode:
authordjm <djm@openbsd.org>2005-10-10 10:23:08 +0000
committerdjm <djm@openbsd.org>2005-10-10 10:23:08 +0000
commitb693d36b7a63cfe301404fbcee25b72d5f2d5b41 (patch)
treee464ec369c434315dfd4f5159e67a23b6d27977c /usr.bin/ssh/channels.c
parentReflect reality. Xr package 5, and remove all the text that used to apply (diff)
downloadwireguard-openbsd-b693d36b7a63cfe301404fbcee25b72d5f2d5b41.tar.xz
wireguard-openbsd-b693d36b7a63cfe301404fbcee25b72d5f2d5b41.zip
fix regression I introduced in 4.2: X11 forwardings initiated after
a session has exited (e.g. "(sleep 5; xterm) &") would not start. bz #1086 reported by t8m AT centrum.cz; ok markus@ dtucker@
Diffstat (limited to 'usr.bin/ssh/channels.c')
-rw-r--r--usr.bin/ssh/channels.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/usr.bin/ssh/channels.c b/usr.bin/ssh/channels.c
index fea40009a48..2e40907d9e3 100644
--- a/usr.bin/ssh/channels.c
+++ b/usr.bin/ssh/channels.c
@@ -39,7 +39,7 @@
*/
#include "includes.h"
-RCSID("$OpenBSD: channels.c,v 1.224 2005/09/07 08:53:53 markus Exp $");
+RCSID("$OpenBSD: channels.c,v 1.225 2005/10/10 10:23:08 djm Exp $");
#include "ssh.h"
#include "ssh1.h"
@@ -268,6 +268,7 @@ channel_new(char *ctype, int type, int rfd, int wfd, int efd,
c->force_drain = 0;
c->single_connection = 0;
c->detach_user = NULL;
+ c->detach_close = 0;
c->confirm = NULL;
c->confirm_ctx = NULL;
c->input_filter = NULL;
@@ -627,7 +628,7 @@ channel_register_confirm(int id, channel_callback_fn *fn, void *ctx)
c->confirm_ctx = ctx;
}
void
-channel_register_cleanup(int id, channel_callback_fn *fn)
+channel_register_cleanup(int id, channel_callback_fn *fn, int do_close)
{
Channel *c = channel_lookup(id);
@@ -636,6 +637,7 @@ channel_register_cleanup(int id, channel_callback_fn *fn)
return;
}
c->detach_user = fn;
+ c->detach_close = do_close;
}
void
channel_cancel_cleanup(int id)
@@ -647,6 +649,7 @@ channel_cancel_cleanup(int id)
return;
}
c->detach_user = NULL;
+ c->detach_close = 0;
}
void
channel_register_filter(int id, channel_filter_fn *fn)
@@ -1660,7 +1663,7 @@ channel_garbage_collect(Channel *c)
if (c == NULL)
return;
if (c->detach_user != NULL) {
- if (!chan_is_dead(c, 0))
+ if (!chan_is_dead(c, c->detach_close))
return;
debug2("channel %d: gc: notify user", c->self);
c->detach_user(c->self, NULL);