mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-01-10 01:48:00 +00:00
Fix a pty-freeing error which caused a segfault if you attempted to
use Restart Session in a post-not-close-on-exit pterm. [originally from svn r9909]
This commit is contained in:
parent
1f3901a3a2
commit
5a04ae3420
14
unix/uxpty.c
14
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)
|
||||
|
Loading…
Reference in New Issue
Block a user