mirror of
https://github.com/python/cpython.git
synced 2025-08-19 00:00:48 +00:00
Merged revisions 78527,78531 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r78527 | gregory.p.smith | 2010-02-28 17:22:39 -0800 (Sun, 28 Feb 2010) | 4 lines Issue #7242: On Solaris 9 and earlier calling os.fork() from within a thread could raise an incorrect RuntimeError about not holding the import lock. The import lock is now reinitialized after fork. ........ r78531 | gregory.p.smith | 2010-02-28 18:31:33 -0800 (Sun, 28 Feb 2010) | 2 lines Fix for r78527. It left out updating forkpty. ........
This commit is contained in:
parent
56f1682a44
commit
c21d0cb6cf
4 changed files with 76 additions and 18 deletions
|
@ -4,6 +4,7 @@ import random
|
|||
from test import test_support
|
||||
import thread
|
||||
import time
|
||||
import sys
|
||||
|
||||
from test import lock_tests
|
||||
|
||||
|
@ -169,8 +170,47 @@ class LockTests(lock_tests.LockTests):
|
|||
locktype = thread.allocate_lock
|
||||
|
||||
|
||||
class TestForkInThread(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.read_fd, self.write_fd = os.pipe()
|
||||
|
||||
def test_forkinthread(self):
|
||||
if sys.platform.startswith('win'):
|
||||
from test.test_support import TestSkipped
|
||||
raise TestSkipped("This test is only appropriate for "
|
||||
"POSIX-like systems.")
|
||||
def thread1():
|
||||
try:
|
||||
pid = os.fork() # fork in a thread
|
||||
except RuntimeError:
|
||||
sys.exit(0) # exit the child
|
||||
|
||||
if pid == 0: # child
|
||||
os.close(self.read_fd)
|
||||
os.write(self.write_fd, "OK")
|
||||
sys.exit(0)
|
||||
else: # parent
|
||||
os.close(self.write_fd)
|
||||
|
||||
thread.start_new_thread(thread1, ())
|
||||
self.assertEqual(os.read(self.read_fd, 2), "OK",
|
||||
"Unable to fork() in thread")
|
||||
|
||||
def tearDown(self):
|
||||
try:
|
||||
os.close(self.read_fd)
|
||||
except OSError:
|
||||
pass
|
||||
|
||||
try:
|
||||
os.close(self.write_fd)
|
||||
except OSError:
|
||||
pass
|
||||
|
||||
|
||||
def test_main():
|
||||
test_support.run_unittest(ThreadRunningTests, BarrierTest, LockTests)
|
||||
test_support.run_unittest(ThreadRunningTests, BarrierTest, LockTests,
|
||||
TestForkInThread)
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_main()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue