diff options
Diffstat (limited to 'nchan.c')
-rw-r--r-- | nchan.c | 10 |
1 files changed, 7 insertions, 3 deletions
@@ -23,7 +23,7 @@ | |||
23 | */ | 23 | */ |
24 | 24 | ||
25 | #include "includes.h" | 25 | #include "includes.h" |
26 | RCSID("$OpenBSD: nchan.c,v 1.25 2001/05/16 22:09:21 markus Exp $"); | 26 | RCSID("$OpenBSD: nchan.c,v 1.26 2001/05/28 23:14:49 markus Exp $"); |
27 | 27 | ||
28 | #include "ssh1.h" | 28 | #include "ssh1.h" |
29 | #include "ssh2.h" | 29 | #include "ssh2.h" |
@@ -394,14 +394,16 @@ chan_send_close2(Channel *c) | |||
394 | void | 394 | void |
395 | chan_mark_dead(Channel *c) | 395 | chan_mark_dead(Channel *c) |
396 | { | 396 | { |
397 | c->flags |= CHAN_DEAD; | 397 | c->type = SSH_CHANNEL_ZOMBIE; |
398 | } | 398 | } |
399 | 399 | ||
400 | int | 400 | int |
401 | chan_is_dead(Channel *c) | 401 | chan_is_dead(Channel *c) |
402 | { | 402 | { |
403 | if (c->flags & CHAN_DEAD) | 403 | if (c->type == SSH_CHANNEL_ZOMBIE) { |
404 | debug("channel %d: zombie", c->self); | ||
404 | return 1; | 405 | return 1; |
406 | } | ||
405 | if (c->istate != CHAN_INPUT_CLOSED || c->ostate != CHAN_OUTPUT_CLOSED) | 407 | if (c->istate != CHAN_INPUT_CLOSED || c->ostate != CHAN_OUTPUT_CLOSED) |
406 | return 0; | 408 | return 0; |
407 | if (!compat20) { | 409 | if (!compat20) { |
@@ -484,6 +486,7 @@ chan_shutdown_write(Channel *c) | |||
484 | if (close(c->wfd) < 0) | 486 | if (close(c->wfd) < 0) |
485 | log("channel %d: chan_shutdown_write: close() failed for fd%d: %.100s", | 487 | log("channel %d: chan_shutdown_write: close() failed for fd%d: %.100s", |
486 | c->self, c->wfd, strerror(errno)); | 488 | c->self, c->wfd, strerror(errno)); |
489 | c->wfd = -1; | ||
487 | } | 490 | } |
488 | } | 491 | } |
489 | static void | 492 | static void |
@@ -506,5 +509,6 @@ chan_shutdown_read(Channel *c) | |||
506 | if (close(c->rfd) < 0) | 509 | if (close(c->rfd) < 0) |
507 | log("channel %d: chan_shutdown_read: close() failed for fd%d: %.100s", | 510 | log("channel %d: chan_shutdown_read: close() failed for fd%d: %.100s", |
508 | c->self, c->rfd, strerror(errno)); | 511 | c->self, c->rfd, strerror(errno)); |
512 | c->rfd = -1; | ||
509 | } | 513 | } |
510 | } | 514 | } |