From: simon Date: Thu, 11 Jul 2013 17:24:23 +0000 (+0000) Subject: Fix a pty-freeing error which caused a segfault if you attempted to X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/commitdiff_plain/6db084b8b35c8dc4b510caef60f52aa02ceebcbf Fix a pty-freeing error which caused a segfault if you attempted to use Restart Session in a post-not-close-on-exit pterm. git-svn-id: svn://svn.tartarus.org/sgt/putty@9909 cda61777-01e9-0310-a592-d414129be87e --- diff --git a/unix/uxpty.c b/unix/uxpty.c index 99ff6386..5ebd0504 100644 --- a/unix/uxpty.c +++ b/unix/uxpty.c @@ -411,6 +411,7 @@ void pty_pre_init(void) #endif pty = single_pty = snew(struct pty_tag); + pty->conf = NULL; bufchain_init(&pty->output_data); /* set the child signal handler straight away; it needs to be set @@ -725,6 +726,7 @@ static const char *pty_init(void *frontend, void **backend_handle, Conf *conf, if (single_pty) { pty = single_pty; + assert(pty->conf == NULL); } else { pty = snew(struct pty_tag); pty->master_fd = pty->slave_fd = -1; @@ -967,7 +969,17 @@ static void pty_free(void *handle) del234(ptys_by_pid, pty); del234(ptys_by_fd, pty); - sfree(pty); + conf_free(pty->conf); + pty->conf = NULL; + + if (pty == single_pty) { + /* + * Leave this structure around in case we need to Restart + * Session. + */ + } else { + sfree(pty); + } } static void pty_try_write(Pty pty)