From a6700e65ed1aa45017d6b8723caedf3338910be2 Mon Sep 17 00:00:00 2001 From: Jochen Sprickerhof Date: Thu, 2 Feb 2023 14:58:02 +0100 Subject: [PATCH] build: close ssh_channel upon timeout The build can get stuck when running into the timeout and paramiko not noticing it. This can be reproduced by setting a small build timeout for an app. I tried setting set_keepalive() but it did not help. This forcefully closes the ssh channel to the VM so the fdroid build will continue. As we destroy the VM in the next step anyhow I think this is fine. --- fdroidserver/build.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/fdroidserver/build.py b/fdroidserver/build.py index 2ebd9127..cc291eac 100644 --- a/fdroidserver/build.py +++ b/fdroidserver/build.py @@ -49,6 +49,7 @@ except ImportError: pass buildserverid = None +ssh_channel = None # Note that 'force' here also implies test mode. @@ -68,7 +69,7 @@ def build_server(app, build, vcs, build_dir, output_dir, log_dir, force): target folder for the build result force """ - global buildserverid + global buildserverid, ssh_channel try: paramiko @@ -892,6 +893,8 @@ def force_halt_build(timeout): """Halt the currently running Vagrant VM, to be called from a Timer.""" logging.error(_('Force halting build after {0} sec timeout!').format(timeout)) timeout_event.set() + if ssh_channel: + ssh_channel.close() vm = vmtools.get_build_vm('builder') vm.destroy()