Author: Alex Gaynor <[email protected]>
Branch:
Changeset: r60704:fe4735de4d71
Date: 2013-01-29 20:25 -0800
http://bitbucket.org/pypy/pypy/changeset/fe4735de4d71/
Log: merged upstream
diff --git a/pypy/module/thread/test/support.py
b/pypy/module/thread/test/support.py
--- a/pypy/module/thread/test/support.py
+++ b/pypy/module/thread/test/support.py
@@ -2,6 +2,7 @@
import time
import thread
import os
+import errno
from pypy.interpreter.gateway import interp2app, unwrap_spec
from pypy.module.thread import gil
@@ -28,7 +29,12 @@
def kill():
for x in range(delay * 10):
time.sleep(0.1)
- os.kill(pid, 0)
+ try:
+ os.kill(pid, 0)
+ except OSError, e:
+ if e.errno == errno.ESRCH: # no such process
+ return
+ raise
os.kill(pid, 9)
print "process %s killed!" % (pid,)
thread.start_new_thread(kill, ())
diff --git a/pypy/module/thread/test/test_fork.py
b/pypy/module/thread/test/test_fork.py
--- a/pypy/module/thread/test/test_fork.py
+++ b/pypy/module/thread/test/test_fork.py
@@ -1,7 +1,7 @@
from pypy.module.thread.test.support import GenericTestThread
class AppTestFork(GenericTestThread):
- def test_fork(self):
+ def test_fork_with_thread(self):
# XXX This test depends on a multicore machine, as busy_thread must
# aquire the GIL the instant that the main thread releases it.
# It will incorrectly pass if the GIL is not grabbed in time.
@@ -12,45 +12,48 @@
if not hasattr(os, 'fork'):
skip("No fork on this platform")
- run = True
- done = []
def busy_thread():
while run:
time.sleep(0)
done.append(None)
- try:
- thread.start_new(busy_thread, ())
+ for i in range(1):
+ run = True
+ done = []
+ try:
+ thread.start_new(busy_thread, ())
+ print 'sleep'
- pid = os.fork()
-
- if pid == 0:
- os._exit(0)
-
- else:
- time.sleep(1)
- spid, status = os.waitpid(pid, os.WNOHANG)
- assert spid == pid
- finally:
- run = False
- self.waitfor(lambda: done)
+ pid = os.fork()
+ if pid == 0:
+ os._exit(0)
+ else:
+ self.timeout_killer(pid, 5)
+ exitcode = os.waitpid(pid, 0)[1]
+ assert exitcode == 0 # if 9, process was killed by timer!
+ finally:
+ run = False
+ self.waitfor(lambda: done)
+ assert done
def test_forked_can_thread(self):
"Checks that a forked interpreter can start a thread"
- import os, thread, time
+ import thread
+ import os
if not hasattr(os, 'fork'):
skip("No fork on this platform")
- # pre-allocate some locks
- thread.start_new_thread(lambda: None, ())
+ for i in range(10):
+ # pre-allocate some locks
+ thread.start_new_thread(lambda: None, ())
+ print 'sleep'
- pid = os.fork()
- if pid == 0:
- print 'in child'
- thread.start_new_thread(lambda: None, ())
- os._exit(0)
- else:
- self.timeout_killer(pid, 5)
- exitcode = os.waitpid(pid, 0)[1]
- assert exitcode == 0 # if 9, process was killed by timer!
+ pid = os.fork()
+ if pid == 0:
+ thread.start_new_thread(lambda: None, ())
+ os._exit(0)
+ else:
+ self.timeout_killer(pid, 5)
+ exitcode = os.waitpid(pid, 0)[1]
+ assert exitcode == 0 # if 9, process was killed by timer!
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit