From 5f81f0486db3b1d75bfe9368b267c6897f548f46 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. --- 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;