From 83393d3c87b2b0706d1b3b442902a631cc078afa Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Thu, 6 Dec 2007 20:53:48 +0000 Subject: [PATCH] Only close the tty during exit process and leave freeing it to when the socket is lost. --- server-msg.c | 7 +++---- tty.c | 15 +++++++++------ 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/server-msg.c b/server-msg.c index fec44099..4441deda 100644 --- a/server-msg.c +++ b/server-msg.c @@ -1,5 +1,5 @@ -/* $Id: server-msg.c,v 1.40 2007-12-06 09:46:23 nicm Exp $ */ +/* $Id: server-msg.c,v 1.41 2007-12-06 20:53:48 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -250,9 +250,8 @@ server_msg_fn_exiting(struct hdr *hdr, struct client *c) log_debug("exiting msg from client"); c->session = NULL; - - if (c->tty.fd != -1) - tty_free(&c->tty); + + tty_close(&c->tty); recalculate_sizes(); diff --git a/tty.c b/tty.c index 389d9d32..0d38b11e 100644 --- a/tty.c +++ b/tty.c @@ -1,4 +1,4 @@ -/* $Id: tty.c,v 1.12 2007-12-06 18:28:55 nicm Exp $ */ +/* $Id: tty.c,v 1.13 2007-12-06 20:53:48 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -49,7 +49,10 @@ void tty_init(struct tty *tty, char *path, char *term) { tty->path = xstrdup(path); - tty->termname = xstrdup(term); + if (term == NULL) + tty->termname = xstrdup("unknown"); + else + tty->termname = xstrdup(term); } int @@ -64,8 +67,6 @@ tty_open(struct tty *tty, char **cause) return (-1); } - if (tty->termname == NULL) - tty->termname = xstrdup("unknown"); if ((tty->term = tty_find_term(tty->termname, tty->fd, cause)) == NULL) goto error; @@ -118,6 +119,9 @@ tty_close(struct tty *tty) { struct winsize ws; + if (tty->fd == -1) + return; + if (ioctl(tty->fd, TIOCGWINSZ, &ws) == -1) fatal("ioctl(TIOCGWINSZ)"); if (tcsetattr(tty->fd, TCSANOW, &tty->tio) != 0) @@ -148,8 +152,7 @@ tty_close(struct tty *tty) void tty_free(struct tty *tty) { - if (tty->fd != -1) - tty_close(tty); + tty_close(tty); if (tty->path != NULL) xfree(tty->path);