On Fri, Jul 28, 2023 at 5:13 AM Richard Purdie <richard.pur...@linuxfoundation.org> wrote: > > 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.pur...@linuxfoundation.org> > --- > meta/lib/oeqa/core/target/ssh.py | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/meta/lib/oeqa/core/target/ssh.py > b/meta/lib/oeqa/core/target/ssh.py > index 243e45dd99e..72ed1adbf89 100644 > --- a/meta/lib/oeqa/core/target/ssh.py > +++ b/meta/lib/oeqa/core/target/ssh.py > @@ -265,6 +265,7 @@ def SSHCall(command, logger, timeout=None, **opts): > time.sleep(5) > try: > process.kill() > + process.wait()
I think this can still result in a orphaned process; if the process.terminate() on the line above is successful, the process will exit and then process.kill() here will raise an exception and will call wait. This is true generally everywhere; wait() must be called regardless of if kill() successed, because kill() will fail if the process is already dead. It's a little tricky because process.commuinicate() calls wait(), so you can't unconditionally call wait(), but my solution was to remove all the kill() and wait() calls that already exist and add: try: run() except: logger.debug(....) raise finally: if process.returncode is None: try: process.wait(timeout=5) except TimeoutExpired: try: process.kill() except OSError: pass process.wait() > except OSError: > logger.debug('OSError when killing process') > pass > @@ -287,6 +288,7 @@ def SSHCall(command, logger, timeout=None, **opts): > except TimeoutExpired: > try: > process.kill() > + process.wait() > except OSError: > logger.debug('OSError') > pass > @@ -316,6 +318,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 > > -- > 2.39.2 > > > >
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#185032): https://lists.openembedded.org/g/openembedded-core/message/185032 Mute This Topic: https://lists.openembedded.org/mt/100408183/21656 Group Owner: openembedded-core+ow...@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-