]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core.git/commitdiff
target/ssh: Ensure exit code set for commands
authorRichard Purdie <richard.purdie@linuxfoundation.org>
Fri, 28 Jul 2023 10:16:08 +0000 (11:16 +0100)
committerSteve Sakoman <steve@sakoman.com>
Tue, 22 Aug 2023 17:07:13 +0000 (07:07 -1000)
As spotted by Joshua Watt, the returncode isn't set until .poll() or .wait()
is called so we need to call this after the .kill() call.

This fixes return code reporting so that timeouts for example now return an
exit code when they didn't before.

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 3924e94214b5135369be2551d54fb92097d35e95)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
meta/lib/oeqa/core/target/ssh.py

index 7c206ff105592a37830faf15fd2fc05f0a095f7f..69fdc146f0ac81c96161b1ded8be0611ae00084b 100644 (file)
@@ -262,6 +262,7 @@ def SSHCall(command, logger, timeout=None, **opts):
                 time.sleep(5)
                 try:
                     process.kill()
+                    process.wait()
                 except OSError:
                     logger.debug('OSError when killing process')
                     pass
@@ -284,6 +285,7 @@ def SSHCall(command, logger, timeout=None, **opts):
             except TimeoutExpired:
                 try:
                     process.kill()
+                    process.wait()
                 except OSError:
                     logger.debug('OSError')
                     pass
@@ -313,6 +315,7 @@ def SSHCall(command, logger, timeout=None, **opts):
         # whilst running and ensure we don't leave a process behind.
         if process.poll() is None:
             process.kill()
+            process.wait()
         logger.debug('Something went wrong, killing SSH process')
         raise