diff options
author | Miss Skeleton (bot) <31488909+miss-islington@users.noreply.github.com> | 2020-10-12 08:51:10 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-12 08:51:10 (GMT) |
commit | 33057c70920787627f2c94d08eb5d33c31f8bdd9 (patch) | |
tree | 7d430fb2d931dd2d7f627ad9574dc31b8eddb2a9 /Lib | |
parent | 1006f63a8b4327e8a74eb978b175b5234bb46c6c (diff) | |
download | cpython-33057c70920787627f2c94d08eb5d33c31f8bdd9.zip cpython-33057c70920787627f2c94d08eb5d33c31f8bdd9.tar.gz cpython-33057c70920787627f2c94d08eb5d33c31f8bdd9.tar.bz2 |
bpo-41739: Fix test_logging.test_race_between_set_target_and_flush() (GH-22655) (GH-22656) (GH-22662)
The test now waits until all threads complete to avoid leaking
running threads.
Also, use regular threads rather than daemon threads.
(cherry picked from commit 13ff396c019d548ba181cf22c6f39309a300723c)
(cherry picked from commit f5393dc2a0ced7bf670ebc56b5fd10a3eb328d1a)
Co-authored-by: Victor Stinner <vstinner@python.org>
Co-authored-by: Victor Stinner <vstinner@python.org>
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/test/test_logging.py | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py index cea51b4..b9392ae 100644 --- a/Lib/test/test_logging.py +++ b/Lib/test/test_logging.py @@ -1177,22 +1177,27 @@ class MemoryHandlerTest(BaseTest): class MockRaceConditionHandler: def __init__(self, mem_hdlr): self.mem_hdlr = mem_hdlr + self.threads = [] def removeTarget(self): self.mem_hdlr.setTarget(None) def handle(self, msg): - t = threading.Thread(target=self.removeTarget) - t.daemon = True - t.start() + thread = threading.Thread(target=self.removeTarget) + self.threads.append(thread) + thread.start() target = MockRaceConditionHandler(self.mem_hdlr) - self.mem_hdlr.setTarget(target) + try: + self.mem_hdlr.setTarget(target) - for _ in range(10): - time.sleep(0.005) - self.mem_logger.info("not flushed") - self.mem_logger.warning("flushed") + for _ in range(10): + time.sleep(0.005) + self.mem_logger.info("not flushed") + self.mem_logger.warning("flushed") + finally: + for thread in target.threads: + support.join_thread(thread) class ExceptionFormatter(logging.Formatter): |