mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-03-21 22:28:37 -05:00
In the various channel request mini-coroutines, replace
crWaitUntilV(pktin) with plain crReturnV, because those coroutines can be called back either with a response packet from the channel request _or_ with NULL by ssh_free meaning 'please just clean yourself up'. [originally from svn r9927]
This commit is contained in:
parent
16d62f6d94
commit
0d7f2fdabc
16
ssh.c
16
ssh.c
@ -7543,7 +7543,9 @@ static void ssh2_setup_x11(struct ssh_channel *c, struct Packet *pktin,
|
|||||||
ssh2_pkt_adduint32(pktout, ssh->x11disp->screennum);
|
ssh2_pkt_adduint32(pktout, ssh->x11disp->screennum);
|
||||||
ssh2_pkt_send(ssh, pktout);
|
ssh2_pkt_send(ssh, pktout);
|
||||||
|
|
||||||
crWaitUntilV(pktin);
|
/* Wait to be called back with either a response packet, or NULL
|
||||||
|
* meaning clean up and free our data */
|
||||||
|
crReturnV;
|
||||||
|
|
||||||
if (pktin) {
|
if (pktin) {
|
||||||
if (pktin->type == SSH2_MSG_CHANNEL_SUCCESS) {
|
if (pktin->type == SSH2_MSG_CHANNEL_SUCCESS) {
|
||||||
@ -7573,7 +7575,9 @@ static void ssh2_setup_agent(struct ssh_channel *c, struct Packet *pktin,
|
|||||||
ssh2_setup_agent, s);
|
ssh2_setup_agent, s);
|
||||||
ssh2_pkt_send(ssh, pktout);
|
ssh2_pkt_send(ssh, pktout);
|
||||||
|
|
||||||
crWaitUntilV(pktin);
|
/* Wait to be called back with either a response packet, or NULL
|
||||||
|
* meaning clean up and free our data */
|
||||||
|
crReturnV;
|
||||||
|
|
||||||
if (pktin) {
|
if (pktin) {
|
||||||
if (pktin->type == SSH2_MSG_CHANNEL_SUCCESS) {
|
if (pktin->type == SSH2_MSG_CHANNEL_SUCCESS) {
|
||||||
@ -7620,7 +7624,9 @@ static void ssh2_setup_pty(struct ssh_channel *c, struct Packet *pktin,
|
|||||||
ssh2_pkt_send(ssh, pktout);
|
ssh2_pkt_send(ssh, pktout);
|
||||||
ssh->state = SSH_STATE_INTERMED;
|
ssh->state = SSH_STATE_INTERMED;
|
||||||
|
|
||||||
crWaitUntilV(pktin);
|
/* Wait to be called back with either a response packet, or NULL
|
||||||
|
* meaning clean up and free our data */
|
||||||
|
crReturnV;
|
||||||
|
|
||||||
if (pktin) {
|
if (pktin) {
|
||||||
if (pktin->type == SSH2_MSG_CHANNEL_SUCCESS) {
|
if (pktin->type == SSH2_MSG_CHANNEL_SUCCESS) {
|
||||||
@ -7678,7 +7684,9 @@ static void ssh2_setup_env(struct ssh_channel *c, struct Packet *pktin,
|
|||||||
s->env_left = s->num_env;
|
s->env_left = s->num_env;
|
||||||
|
|
||||||
while (s->env_left > 0) {
|
while (s->env_left > 0) {
|
||||||
crWaitUntilV(pktin);
|
/* Wait to be called back with either a response packet,
|
||||||
|
* or NULL meaning clean up and free our data */
|
||||||
|
crReturnV;
|
||||||
if (!pktin) goto out;
|
if (!pktin) goto out;
|
||||||
if (pktin->type == SSH2_MSG_CHANNEL_SUCCESS)
|
if (pktin->type == SSH2_MSG_CHANNEL_SUCCESS)
|
||||||
s->env_ok++;
|
s->env_ok++;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user