mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-07-16 10:37:38 -05:00
Work around unhelpful GTK event ordering.
If the SSH socket is readable, GTK will preferentially give us a callback to read from it rather than calling its idle functions. That means the ssh->in_raw bufchain can just keep accumulating data, and the callback that gets the BPP to take data back off that bufchain will never be called at all. The solution is to use sk_set_frozen after a certain point, to stop reading further data from the socket (and, more importantly, disable GTK's I/O callback for that fd) until we've had a chance to process some backlog, and then unfreeze the socket again afterwards. Annoyingly, that means adding a _second_ 'frozen' flag to Ssh, because the one we already had has exactly the wrong semantics - it prevents us from _processing_ our backlog, which is the last thing we want if the entire problem is that we need that backlog to get smaller! So now there are two frozen flags, and a big comment explaining the difference.
This commit is contained in:
3
ssh.h
3
ssh.h
@ -378,6 +378,9 @@ void ssh_got_exitcode(Ssh *ssh, int status);
|
||||
void ssh_ldisc_update(Ssh *ssh);
|
||||
void ssh_got_fallback_cmd(Ssh *ssh);
|
||||
|
||||
/* Communications back to ssh.c from the BPP */
|
||||
void ssh_conn_processed_data(Ssh *ssh);
|
||||
|
||||
/* Functions to abort the connection, for various reasons. */
|
||||
void ssh_remote_error(Ssh *ssh, const char *fmt, ...);
|
||||
void ssh_remote_eof(Ssh *ssh, const char *fmt, ...);
|
||||
|
Reference in New Issue
Block a user