# assert that no new lines have been added
self.assert_log_lines(lines) # no change
+ def test_race_between_set_target_and_flush(self):
+ class MockRaceConditionHandler:
+ def __init__(self, mem_hdlr):
+ self.mem_hdlr = mem_hdlr
+
+ def removeTarget(self):
+ self.mem_hdlr.setTarget(None)
+
+ def handle(self, msg):
+ t = threading.Thread(target=self.removeTarget)
+ t.daemon = True
+ t.start()
+
+ target = MockRaceConditionHandler(self.mem_hdlr)
+ self.mem_hdlr.setTarget(target)
+
+ for _ in range(10):
+ time.sleep(0.005)
+ self.mem_logger.info("not flushed")
+ self.mem_logger.warning("flushed")
+
class ExceptionFormatter(logging.Formatter):
"""A special exception formatter."""