Skip to content

Commit f5393dc

Browse files
authored
bpo-41739: Fix test_logging.test_race_between_set_target_and_flush() (GH-22655) (GH-22656)
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 13ff396)
1 parent 4af6729 commit f5393dc

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
@@ -1161,22 +1161,27 @@ def test_race_between_set_target_and_flush(self):
11611161
class MockRaceConditionHandler:
11621162
def __init__(self, mem_hdlr):
11631163
self.mem_hdlr = mem_hdlr
1164+
self.threads = []
11641165

11651166
def removeTarget(self):
11661167
self.mem_hdlr.setTarget(None)
11671168

11681169
def handle(self, msg):
1169-
t = threading.Thread(target=self.removeTarget)
1170-
t.daemon = True
1171-
t.start()
1170+
thread = threading.Thread(target=self.removeTarget)
1171+
self.threads.append(thread)
1172+
thread.start()
11721173

11731174
target = MockRaceConditionHandler(self.mem_hdlr)
1174-
self.mem_hdlr.setTarget(target)
1175+
try:
1176+
self.mem_hdlr.setTarget(target)
11751177

1176-
for _ in range(10):
1177-
time.sleep(0.005)
1178-
self.mem_logger.info("not flushed")
1179-
self.mem_logger.warning("flushed")
1178+
for _ in range(10):
1179+
time.sleep(0.005)
1180+
self.mem_logger.info("not flushed")
1181+
self.mem_logger.warning("flushed")
1182+
finally:
1183+
for thread in target.threads:
1184+
support.join_thread(thread)
11801185

11811186

11821187
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)