aboutsummaryrefslogtreecommitdiff
path: root/server.c
diff options
context:
space:
mode:
authorTiago Cunha <tcunha@gmx.com>2009-08-31 22:24:18 +0000
committerTiago Cunha <tcunha@gmx.com>2009-08-31 22:24:18 +0000
commit86fb9737dcc212893d18991eade111a2b41e9efb (patch)
treeb764bc3f63ddfad2ffc49b3e40dea5b8eeba2e3b /server.c
parentd15e88cb688fa1d799920e35f0676fdcb3995a79 (diff)
downloadrtmux-86fb9737dcc212893d18991eade111a2b41e9efb.tar.gz
rtmux-86fb9737dcc212893d18991eade111a2b41e9efb.tar.bz2
rtmux-86fb9737dcc212893d18991eade111a2b41e9efb.zip
Sync OpenBSD patchset 300:
Don't call tty_free unless the client is a terminal, otherwise tty_init hasn't been called and it may end up doing close(0). From Kalle Olavi Niemitalo.
Diffstat (limited to 'server.c')
-rw-r--r--server.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/server.c b/server.c
index d4e1fffd..8dc946e0 100644
--- a/server.c
+++ b/server.c
@@ -1,4 +1,4 @@
-/* $Id: server.c,v 1.175 2009-08-24 16:27:03 tcunha Exp $ */
+/* $Id: server.c,v 1.176 2009-08-31 22:24:18 tcunha Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -918,7 +918,12 @@ server_lost_client(struct client *c)
}
log_debug("lost client %d", c->ibuf.fd);
- tty_free(&c->tty);
+ /*
+ * If CLIENT_TERMINAL hasn't been set, then tty_init hasn't been called
+ * and tty_free might close an unrelated fd.
+ */
+ if (c->flags & CLIENT_TERMINAL)
+ tty_free(&c->tty);
screen_free(&c->status);