Skip to content

Commit 13ff396

Browse files
authored
bpo-41739: Fix test_logging.test_race_between_set_target_and_flush() (GH-22655)
The test now waits until all threads complete to avoid leaking running threads. Also, use regular threads rather than daemon threads.
1 parent 47ecfd8 commit 13ff396

File tree

2 files changed

+15
-8
lines changed

2 files changed

+15
-8
lines changed

Lib/test/test_logging.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1164,22 +1164,27 @@ def test_race_between_set_target_and_flush(self):
11641164
class MockRaceConditionHandler:
11651165
def __init__(self, mem_hdlr):
11661166
self.mem_hdlr = mem_hdlr
1167+
self.threads = []
11671168

11681169
def removeTarget(self):
11691170
self.mem_hdlr.setTarget(None)
11701171

11711172
def handle(self, msg):
1172-
t = threading.Thread(target=self.removeTarget)
1173-
t.daemon = True
1174-
t.start()
1173+
thread = threading.Thread(target=self.removeTarget)
1174+
self.threads.append(thread)
1175+
thread.start()
11751176

11761177
target = MockRaceConditionHandler(self.mem_hdlr)
1177-
self.mem_hdlr.setTarget(target)
1178+
try:
1179+
self.mem_hdlr.setTarget(target)
11781180

1179-
for _ in range(10):
1180-
time.sleep(0.005)
1181-
self.mem_logger.info("not flushed")
1182-
self.mem_logger.warning("flushed")
1181+
for _ in range(10):
1182+
time.sleep(0.005)
1183+
self.mem_logger.info("not flushed")
1184+
self.mem_logger.warning("flushed")
1185+
finally:
1186+
for thread in target.threads:
1187+
threading_helper.join_thread(thread)
11831188

11841189

11851190
class ExceptionFormatter(logging.Formatter):
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fix test_logging.test_race_between_set_target_and_flush(): the test now
2+
waits until all threads complete to avoid leaking running threads.

0 commit comments

Comments
 (0)