[PATCH STABLE] run-tests: fix race condition
Laurent Charignon
lcharignon at fb.com
Thu Jan 21 20:42:04 UTC 2016
# HG changeset patch
# User Laurent Charignon <lcharignon at fb.com>
# 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
More information about the Mercurial-devel
mailing list