From patchwork Thu Jan 21 20:42:04 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [STABLE] run-tests: fix race condition From: Laurent Charignon X-Patchwork-Id: 12862 Message-Id: <0f975bc6ef3c310d22fb.1453408924@dev5073.prn1.facebook.com> To: Date: Thu, 21 Jan 2016 12:42:04 -0800 # HG changeset patch # User Laurent Charignon # Date 1453408632 28800 # Thu Jan 21 12:37:12 2016 -0800 # Branch stable # Node ID 0f975bc6ef3c310d22fb3016a3204e73bd2fdb1c # Parent f62dea3f36975b3daac82e9dcd0ec964cf30c2a7 run-tests: fix race condition Before this patch, it was possible for run-tests to crash on a race condition. The race condition happens in the following case: - the last test finishes and calls: done.put(None) - the context switches to the main thread that clears the channels list - the context switches to the last test mentioned above, it tries to access channels[channel] and crashes This happened to me while running run-tests. This patch fixes the issue by clearing the channel before considering that the test is done. diff --git a/tests/run-tests.py b/tests/run-tests.py --- a/tests/run-tests.py +++ b/tests/run-tests.py @@ -1526,13 +1526,13 @@ channels[channel] = "=" + test.name[5:].split(".")[0] try: test(result) + channels[channel] = '' done.put(None) except KeyboardInterrupt: - pass + channels[channel] = '' except: # re-raises done.put(('!', test, 'run-test raised an error, see traceback')) raise - channels[channel] = '' def stat(): count = 0