qrexec: better handle remote process termination
If remote end terminates without proper protocol finish (MSG_DATA_EXIT_CODE), terminate also local part instead of waiting indefinitely.
This commit is contained in:
parent
4eb1d72aee
commit
23fc3599e8
@ -296,12 +296,21 @@ int process_child_io(libvchan_t *data_vchan,
|
|||||||
|
|
||||||
/* if all done, exit the loop */
|
/* if all done, exit the loop */
|
||||||
if ((!child_process_pid || child_process_status > -1) &&
|
if ((!child_process_pid || child_process_status > -1) &&
|
||||||
|
(child_process_pid || remote_process_status > -1) &&
|
||||||
stdin_fd == -1 && stdout_fd == -1 && stderr_fd == -1) {
|
stdin_fd == -1 && stdout_fd == -1 && stderr_fd == -1) {
|
||||||
if (child_process_status > -1) {
|
if (child_process_status > -1) {
|
||||||
send_exit_code(data_vchan, child_process_status);
|
send_exit_code(data_vchan, child_process_status);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
/* also if vchan is disconnected (and we processed all the data), there
|
||||||
|
* is no sense of processing further data */
|
||||||
|
if (!libvchan_data_ready(data_vchan) && !libvchan_is_open(data_vchan)) {
|
||||||
|
if (child_process_pid)
|
||||||
|
return remote_process_status;
|
||||||
|
else
|
||||||
|
return child_process_status;
|
||||||
|
}
|
||||||
/* child signaled desire to use single socket for both stdin and stdout */
|
/* child signaled desire to use single socket for both stdin and stdout */
|
||||||
if (stdio_socket_requested) {
|
if (stdio_socket_requested) {
|
||||||
if (stdout_fd != -1)
|
if (stdout_fd != -1)
|
||||||
|
Loading…
Reference in New Issue
Block a user