mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-03-22 06:38:37 -05: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
12
unix/uxpty.c
12
unix/uxpty.c
@ -411,6 +411,7 @@ void pty_pre_init(void)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
pty = single_pty = snew(struct pty_tag);
|
pty = single_pty = snew(struct pty_tag);
|
||||||
|
pty->conf = NULL;
|
||||||
bufchain_init(&pty->output_data);
|
bufchain_init(&pty->output_data);
|
||||||
|
|
||||||
/* set the child signal handler straight away; it needs to be set
|
/* 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) {
|
if (single_pty) {
|
||||||
pty = single_pty;
|
pty = single_pty;
|
||||||
|
assert(pty->conf == NULL);
|
||||||
} else {
|
} else {
|
||||||
pty = snew(struct pty_tag);
|
pty = snew(struct pty_tag);
|
||||||
pty->master_fd = pty->slave_fd = -1;
|
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_pid, pty);
|
||||||
del234(ptys_by_fd, pty);
|
del234(ptys_by_fd, 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);
|
sfree(pty);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pty_try_write(Pty pty)
|
static void pty_try_write(Pty pty)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user