diff --git a/qrexec/qrexec-agent-data.c b/qrexec/qrexec-agent-data.c index fb4d9c6..ae5057e 100644 --- a/qrexec/qrexec-agent-data.c +++ b/qrexec/qrexec-agent-data.c @@ -296,12 +296,21 @@ int process_child_io(libvchan_t *data_vchan, /* if all done, exit the loop */ if ((!child_process_pid || child_process_status > -1) && + (child_process_pid || remote_process_status > -1) && stdin_fd == -1 && stdout_fd == -1 && stderr_fd == -1) { if (child_process_status > -1) { send_exit_code(data_vchan, child_process_status); } 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 */ if (stdio_socket_requested) { if (stdout_fd != -1)