self.match_tests: TestFilter = []
self.pgo = False
self.pgo_extended = False
+ self.tsan = False
self.worker_json = None
self.start = None
self.timeout = None
help='enable Profile Guided Optimization (PGO) training')
group.add_argument('--pgo-extended', action='store_true',
help='enable extended PGO training (slower training)')
+ group.add_argument('--tsan', dest='tsan', action='store_true',
+ help='run a subset of test cases that are proper for the TSAN test')
group.add_argument('--fail-env-changed', action='store_true',
help='if a test file alters the environment, mark '
'the test as failed')
from .runtests import RunTests, HuntRefleak
from .setup import setup_process, setup_test_dir
from .single import run_single_test, PROGRESS_MIN_TIME
+from .tsan import setup_tsan_tests
from .utils import (
StrPath, StrJSON, TestName, TestList, TestTuple, TestFilter,
strip_py_suffix, count, format_duration,
self.quiet: bool = ns.quiet
self.pgo: bool = ns.pgo
self.pgo_extended: bool = ns.pgo_extended
+ self.tsan: bool = ns.tsan
# Test results
self.results: TestResults = TestResults()
# add default PGO tests if no tests are specified
setup_pgo_tests(self.cmdline_args, self.pgo_extended)
+ if self.tsan:
+ setup_tsan_tests(self.cmdline_args)
+
exclude_tests = set()
if self.exclude:
for arg in self.cmdline_args:
--- /dev/null
+# Set of tests run by default if --tsan is specified. The tests below were
+# chosen because they use threads and run in a reasonable amount of time.
+
+TSAN_TESTS = [
+ 'test_code',
+ 'test_enum',
+ 'test_functools',
+ 'test_httpservers',
+ 'test_imaplib',
+ 'test_importlib',
+ 'test_io',
+ 'test_logging',
+ 'test_ssl',
+ 'test_syslog',
+ 'test_thread',
+ 'test_threadedtempfile',
+ 'test_threading_local',
+ 'test_threadsignals',
+]
+
+
+def setup_tsan_tests(cmdline_args):
+ if not cmdline_args:
+ cmdline_args[:] = TSAN_TESTS[:]
--- /dev/null
+Add --tsan to test.regrtest for running TSAN tests in reasonable execution
+times. Patch by Donghee Na.
--- /dev/null
+## reference: https://github.com/google/sanitizers/wiki/ThreadSanitizerSuppressions
+race:get_allocator_unlocked
+race:set_allocator_unlocked
+race:mi_heap_visit_pages
+race:_mi_heap_delayed_free_partial