diff options
Diffstat (limited to 'Lib/test/test_threading.py')
| -rw-r--r-- | Lib/test/test_threading.py | 21 | 
1 files changed, 21 insertions, 0 deletions
diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py index 3629749658..0a78f8c0c2 100644 --- a/Lib/test/test_threading.py +++ b/Lib/test/test_threading.py @@ -445,6 +445,27 @@ class ThreadTests(BaseTestCase):          self.assertEqual(out, b'')          self.assertEqual(err, b'') +    @unittest.skipUnless(hasattr(os, 'fork'), "needs os.fork()") +    def test_is_alive_after_fork(self): +        # Try hard to trigger #18418: is_alive() could sometimes be True on +        # threads that vanished after a fork. +        old_interval = sys.getswitchinterval() +        self.addCleanup(sys.setswitchinterval, old_interval) + +        # Make the bug more likely to manifest. +        sys.setswitchinterval(1e-6) + +        for i in range(20): +            t = threading.Thread(target=lambda: None) +            t.start() +            self.addCleanup(t.join) +            pid = os.fork() +            if pid == 0: +                os._exit(1 if t.is_alive() else 0) +            else: +                pid, status = os.waitpid(pid, 0) +                self.assertEqual(0, status) +  class ThreadJoinOnShutdown(BaseTestCase):  | 
