View | Details | Raw Unified | Return to bug 1917 | Differences between
and this patch

Collapse All | Expand All

(-)channels.c (-1 / +5 lines)
Lines 209-214 channel_lookup(int id) Link Here
209
	case SSH_CHANNEL_OPEN:
209
	case SSH_CHANNEL_OPEN:
210
	case SSH_CHANNEL_INPUT_DRAINING:
210
	case SSH_CHANNEL_INPUT_DRAINING:
211
	case SSH_CHANNEL_OUTPUT_DRAINING:
211
	case SSH_CHANNEL_OUTPUT_DRAINING:
212
	case SSH_CHANNEL_ABANDONED:
212
		return (c);
213
		return (c);
213
	}
214
	}
214
	logit("Non-public channel %d, type %d.", id, c->type);
215
	logit("Non-public channel %d, type %d.", id, c->type);
Lines 525-530 channel_still_open(void) Link Here
525
		case SSH_CHANNEL_DYNAMIC:
526
		case SSH_CHANNEL_DYNAMIC:
526
		case SSH_CHANNEL_CONNECTING:
527
		case SSH_CHANNEL_CONNECTING:
527
		case SSH_CHANNEL_ZOMBIE:
528
		case SSH_CHANNEL_ZOMBIE:
529
		case SSH_CHANNEL_ABANDONED:
528
			continue;
530
			continue;
529
		case SSH_CHANNEL_LARVAL:
531
		case SSH_CHANNEL_LARVAL:
530
			if (!compat20)
532
			if (!compat20)
Lines 570-575 channel_find_open(void) Link Here
570
		case SSH_CHANNEL_OPENING:
572
		case SSH_CHANNEL_OPENING:
571
		case SSH_CHANNEL_CONNECTING:
573
		case SSH_CHANNEL_CONNECTING:
572
		case SSH_CHANNEL_ZOMBIE:
574
		case SSH_CHANNEL_ZOMBIE:
575
		case SSH_CHANNEL_ABANDONED:
573
			continue;
576
			continue;
574
		case SSH_CHANNEL_LARVAL:
577
		case SSH_CHANNEL_LARVAL:
575
		case SSH_CHANNEL_AUTH_SOCKET:
578
		case SSH_CHANNEL_AUTH_SOCKET:
Lines 617-622 channel_open_message(void) Link Here
617
		case SSH_CHANNEL_CLOSED:
620
		case SSH_CHANNEL_CLOSED:
618
		case SSH_CHANNEL_AUTH_SOCKET:
621
		case SSH_CHANNEL_AUTH_SOCKET:
619
		case SSH_CHANNEL_ZOMBIE:
622
		case SSH_CHANNEL_ZOMBIE:
623
		case SSH_CHANNEL_ABANDONED:
620
		case SSH_CHANNEL_MUX_CLIENT:
624
		case SSH_CHANNEL_MUX_CLIENT:
621
		case SSH_CHANNEL_MUX_LISTENER:
625
		case SSH_CHANNEL_MUX_LISTENER:
622
			continue;
626
			continue;
Lines 2469-2475 channel_input_close_confirmation(int typ Link Here
2469
	if (c == NULL)
2473
	if (c == NULL)
2470
		packet_disconnect("Received close confirmation for "
2474
		packet_disconnect("Received close confirmation for "
2471
		    "out-of-range channel %d.", id);
2475
		    "out-of-range channel %d.", id);
2472
	if (c->type != SSH_CHANNEL_CLOSED)
2476
	if (c->type != SSH_CHANNEL_CLOSED && c->type != SSH_CHANNEL_ABANDONED)
2473
		packet_disconnect("Received close confirmation for "
2477
		packet_disconnect("Received close confirmation for "
2474
		    "non-closed channel %d (type %d).", id, c->type);
2478
		    "non-closed channel %d (type %d).", id, c->type);
2475
	channel_free(c);
2479
	channel_free(c);
(-)channels.h (-1 / +2 lines)
Lines 55-61 Link Here
55
#define SSH_CHANNEL_ZOMBIE		14	/* Almost dead. */
55
#define SSH_CHANNEL_ZOMBIE		14	/* Almost dead. */
56
#define SSH_CHANNEL_MUX_LISTENER	15	/* Listener for mux conn. */
56
#define SSH_CHANNEL_MUX_LISTENER	15	/* Listener for mux conn. */
57
#define SSH_CHANNEL_MUX_CLIENT		16	/* Conn. to mux slave */
57
#define SSH_CHANNEL_MUX_CLIENT		16	/* Conn. to mux slave */
58
#define SSH_CHANNEL_MAX_TYPE		17
58
#define SSH_CHANNEL_ABANDONED		17	/* Abandoned session, eg mux */
59
#define SSH_CHANNEL_MAX_TYPE		18
59
60
60
#define CHANNEL_CANCEL_PORT_STATIC	-1
61
#define CHANNEL_CANCEL_PORT_STATIC	-1
61
62
(-)clientloop.c (+3 lines)
Lines 1102-1107 process_escapes(Channel *c, Buffer *bin, Link Here
1102
					chan_write_failed(c);
1102
					chan_write_failed(c);
1103
					if (c->detach_user)
1103
					if (c->detach_user)
1104
						c->detach_user(c->self, NULL);
1104
						c->detach_user(c->self, NULL);
1105
					c->type = SSH_CHANNEL_ABANDONED;
1106
					buffer_clear(&c->input);
1107
					chan_ibuf_empty(c);
1105
					return 0;
1108
					return 0;
1106
				} else
1109
				} else
1107
					quit_pending = 1;
1110
					quit_pending = 1;

Return to bug 1917