Fix race in shell when testing for errors to raise SysExit

SysExit is raised if the OutputManager has non-zero
error_count. However, error_count is incremented in
a print thread, but tested on the main thread.
Currently error_count is tested before the OutputManager
print threads have exited, which results in a race. This race
means that SysExit is not always raised even when an error
has occured.

This change moves the error_count test after the
OutputManager context manager has exited, which ensures that
the OutputManager threads have exited.

Change-Id: I5ef7d9f10057fe2b41f48ab95066a7265b86a3ac
Closes-Bug: #1379229
This commit is contained in:
Alistair Coles 2014-10-09 09:42:16 +01:00
parent 589d34ecda
commit 43c1141baa

@ -1304,9 +1304,7 @@ Examples:
except (ClientException, RequestException, socket.error) as err:
output.error(str(err))
had_error = output.error_count > 0
if had_error:
if output.error_count > 0:
exit(1)