bpo-41503: Fix race between setTarget and flush in logging.handlers.MemoryHandler (GH-21765)

diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py
index eb5b926..d8b3727 100644
--- a/Lib/test/test_logging.py
+++ b/Lib/test/test_logging.py
@@ -1160,6 +1160,27 @@
         # 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."""