tests/run-tests.py
changeset 972 0d4e44410b4d
parent 971 87b7569d7404
child 975 98fa0fa48b7d
--- a/tests/run-tests.py	Mon Jun 20 12:02:52 2011 +0200
+++ b/tests/run-tests.py	Fri Jul 01 14:52:14 2011 +0200
@@ -78,10 +78,7 @@
                 time.sleep(1)
             p.timeout = True
             if p.returncode is None:
-                try:
-                    p.terminate()
-                except OSError:
-                    pass
+                terminate(p)
         threading.Thread(target=t).start()
 
     return p
@@ -262,10 +259,6 @@
             sys.stderr.write(
                 'warning: --timeout option ignored with --debug\n')
         options.timeout = 0
-    if options.timeout and not hasattr(subprocess.Popen, 'terminate'):
-        sys.stderr.write('warning: timeout is not supported on this '
-                         'platform and will be ignored\n')
-        options.timeout = 0
     if options.py3k_warnings:
         if sys.version_info[:2] < (2, 6) or sys.version_info[:2] >= (3, 0):
             parser.error('--py3k-warnings can only be used on Python 2.6+')
@@ -343,6 +336,17 @@
         else:
             print "WARNING: Did not find prerequisite tool: "+p
 
+def terminate(proc):
+    """Terminate subprocess (with fallback for Python versions < 2.6)"""
+    vlog('# Terminating process %d' % proc.pid)
+    try:
+        if hasattr(proc, 'terminate'):
+            proc.terminate()
+        else:
+            os.kill(proc.pid, signal.SIGTERM)
+    except OSError:
+        pass
+
 def killdaemons():
     # Kill off any leftover daemon processes
     try:
@@ -651,10 +655,7 @@
 
     proc = Popen4(cmd, wd, options.timeout)
     def cleanup():
-        try:
-            proc.terminate()
-        except OSError:
-            pass
+        terminate(proc)
         ret = proc.wait()
         if ret == 0:
             ret = signal.SIGTERM << 8