From d482add57d1d73a42628d2062e88afef03923522 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?= Date: Thu, 24 May 2018 04:12:26 +0200 Subject: [PATCH] qrexec: fix handling remote domain death Periodically (every 10s) check if connection is still alive, otherwise killing remote domain (as it's the case of DispVM) will hang client side. (cherry picked from commit 5f81f0486db3b1d75bfe9368b267c6897f548f46) --- qrexec/qrexec-agent-data.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/qrexec/qrexec-agent-data.c b/qrexec/qrexec-agent-data.c index 074ed45..7d314f9 100644 --- a/qrexec/qrexec-agent-data.c +++ b/qrexec/qrexec-agent-data.c @@ -295,6 +295,7 @@ int process_child_io(libvchan_t *data_vchan, int remote_process_status = -1; int ret, max_fd; struct timespec zero_timeout = { 0, 0 }; + struct timespec normal_timeout = { 10, 0 }; struct buffer stdin_buf; sigemptyset(&selectmask); @@ -386,7 +387,7 @@ int process_child_io(libvchan_t *data_vchan, /* check for other FDs, but exit immediately */ ret = pselect(max_fd + 1, &rdset, &wrset, NULL, &zero_timeout, &selectmask); } else - ret = pselect(max_fd + 1, &rdset, &wrset, NULL, NULL, &selectmask); + ret = pselect(max_fd + 1, &rdset, &wrset, NULL, &normal_timeout, &selectmask); if (ret < 0) { if (errno == EINTR) continue;