mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-05-30 16:30:29 -05:00
Add a missing check of outgoing_data.
When the whole SSH connection is throttled and then unthrottled, we need to requeue the callback that transfers data to the Socket from the new outgoing_data queue introduced in commit 9e3522a97. The user-visible effect of this missing call was that outgoing SFTP transactions would lock up, because in SFTP mode we enable the "simple@putty.projects.tartarus.org" mode and essentially turn off the per-channel window management, so throttling of the whole connection becomes the main source of back-pressure.
This commit is contained in:
parent
281d317ab9
commit
ba5e56cd1b
9
ssh.c
9
ssh.c
@ -2310,11 +2310,14 @@ static void ssh_sent(Plug plug, int bufsize)
|
|||||||
{
|
{
|
||||||
Ssh ssh = FROMFIELD(plug, struct ssh_tag, plugvt);
|
Ssh ssh = FROMFIELD(plug, struct ssh_tag, plugvt);
|
||||||
/*
|
/*
|
||||||
* If the send backlog on the SSH socket itself clears, we
|
* If the send backlog on the SSH socket itself clears, we should
|
||||||
* should unthrottle the whole world if it was throttled.
|
* unthrottle the whole world if it was throttled, and also resume
|
||||||
|
* sending our bufchain of queued wire data.
|
||||||
*/
|
*/
|
||||||
if (bufsize < SSH_MAX_BACKLOG)
|
if (bufsize < SSH_MAX_BACKLOG) {
|
||||||
ssh_throttle_all(ssh, 0, bufsize);
|
ssh_throttle_all(ssh, 0, bufsize);
|
||||||
|
queue_idempotent_callback(&ssh->outgoing_data_sender);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ssh_hostport_setup(const char *host, int port, Conf *conf,
|
static void ssh_hostport_setup(const char *host, int port, Conf *conf,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user