|
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) { |