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

Collapse All | Expand All

(-)channels.c (-4 / +4 lines)
Lines 1449-1458 channel_handle_rfd(Channel *c, fd_set *r Link Here
1449
	int len;
1449
	int len;
1450
1450
1451
	if (c->rfd != -1 &&
1451
	if (c->rfd != -1 &&
1452
	    FD_ISSET(c->rfd, readset)) {
1452
	    (c->detach_close || FD_ISSET(c->rfd, readset))) {
1453
		errno = 0;
1453
		errno = 0;
1454
		len = read(c->rfd, buf, sizeof(buf));
1454
		len = read(c->rfd, buf, sizeof(buf));
1455
		if (len < 0 && (errno == EINTR || errno == EAGAIN))
1455
		if (len < 0 && errno == EINTR))
1456
			return 1;
1456
			return 1;
1457
#ifndef PTY_ZEROREAD
1457
#ifndef PTY_ZEROREAD
1458
		if (len <= 0) {
1458
		if (len <= 0) {
Lines 1604-1614 channel_handle_efd(Channel *c, fd_set *r Link Here
1604
				c->local_consumed += len;
1604
				c->local_consumed += len;
1605
			}
1605
			}
1606
		} else if (c->extended_usage == CHAN_EXTENDED_READ &&
1606
		} else if (c->extended_usage == CHAN_EXTENDED_READ &&
1607
		    FD_ISSET(c->efd, readset)) {
1607
		    (c->detach_close || FD_ISSET(c->efd, readset))) {
1608
			len = read(c->efd, buf, sizeof(buf));
1608
			len = read(c->efd, buf, sizeof(buf));
1609
			debug2("channel %d: read %d from efd %d",
1609
			debug2("channel %d: read %d from efd %d",
1610
			    c->self, len, c->efd);
1610
			    c->self, len, c->efd);
1611
			if (len < 0 && (errno == EINTR || errno == EAGAIN))
1611
			if (len < 0 && errno == EINTR)
1612
				return 1;
1612
				return 1;
1613
			if (len <= 0) {
1613
			if (len <= 0) {
1614
				debug2("channel %d: closing read-efd %d",
1614
				debug2("channel %d: closing read-efd %d",
(-)serverloop.c (-4 / +14 lines)
Lines 280-285 wait_until_can_do_something(fd_set **rea Link Here
280
	struct timeval tv, *tvp;
280
	struct timeval tv, *tvp;
281
	int ret;
281
	int ret;
282
	int client_alive_scheduled = 0;
282
	int client_alive_scheduled = 0;
283
	int program_alive_scheduled = 0;
283
284
284
	/*
285
	/*
285
	 * if using client_alive, set the max timeout accordingly,
286
	 * if using client_alive, set the max timeout accordingly,
Lines 317-322 wait_until_can_do_something(fd_set **rea Link Here
317
		 * the client, try to get some more data from the program.
318
		 * the client, try to get some more data from the program.
318
		 */
319
		 */
319
		if (packet_not_very_much_data_to_write()) {
320
		if (packet_not_very_much_data_to_write()) {
321
			program_alive_scheduled = child_terminated;
320
			if (!fdout_eof)
322
			if (!fdout_eof)
321
				FD_SET(fdout, *readsetp);
323
				FD_SET(fdout, *readsetp);
322
			if (!fderr_eof)
324
			if (!fderr_eof)
Lines 362-369 wait_until_can_do_something(fd_set **rea Link Here
362
		memset(*writesetp, 0, *nallocp);
364
		memset(*writesetp, 0, *nallocp);
363
		if (errno != EINTR)
365
		if (errno != EINTR)
364
			error("select: %.100s", strerror(errno));
366
			error("select: %.100s", strerror(errno));
365
	} else if (ret == 0 && client_alive_scheduled)
367
	} else {
366
		client_alive_check();
368
		if (ret == 0 && client_alive_scheduled)
369
			client_alive_check();
370
		if (program_alive_scheduled && fdin_is_tty) {
371
			if (!fdout_eof)
372
				FD_SET(fdout, *readsetp);
373
			if (!fderr_eof)
374
				FD_SET(fderr, *readsetp);
375
		}
376
	}
367
377
368
	notify_done(*readsetp);
378
	notify_done(*readsetp);
369
}
379
}
Lines 407-413 process_input(fd_set *readset) Link Here
407
	if (!fdout_eof && FD_ISSET(fdout, readset)) {
417
	if (!fdout_eof && FD_ISSET(fdout, readset)) {
408
		errno = 0;
418
		errno = 0;
409
		len = read(fdout, buf, sizeof(buf));
419
		len = read(fdout, buf, sizeof(buf));
410
		if (len < 0 && (errno == EINTR || errno == EAGAIN)) {
420
		if (len < 0 && errno == EINTR) {
411
			/* do nothing */
421
			/* do nothing */
412
#ifndef PTY_ZEROREAD
422
#ifndef PTY_ZEROREAD
413
		} else if (len <= 0) {
423
		} else if (len <= 0) {
Lines 425-431 process_input(fd_set *readset) Link Here
425
	if (!fderr_eof && FD_ISSET(fderr, readset)) {
435
	if (!fderr_eof && FD_ISSET(fderr, readset)) {
426
		errno = 0;
436
		errno = 0;
427
		len = read(fderr, buf, sizeof(buf));
437
		len = read(fderr, buf, sizeof(buf));
428
		if (len < 0 && (errno == EINTR || errno == EAGAIN)) {
438
		if (len < 0 && errno == EINTR) {
429
			/* do nothing */
439
			/* do nothing */
430
#ifndef PTY_ZEROREAD
440
#ifndef PTY_ZEROREAD
431
		} else if (len <= 0) {
441
		} else if (len <= 0) {

Return to bug 52