tests/run-tests.py
branchstable
changeset 970 e42946273064
parent 966 e6f112b6f14b
child 971 87b7569d7404
equal deleted inserted replaced
968:8d821e2fed38 970:e42946273064
    76             start = time.time()
    76             start = time.time()
    77             while time.time() - start < timeout and p.returncode is None:
    77             while time.time() - start < timeout and p.returncode is None:
    78                 time.sleep(1)
    78                 time.sleep(1)
    79             p.timeout = True
    79             p.timeout = True
    80             if p.returncode is None:
    80             if p.returncode is None:
    81                 try:
    81                 terminate(p)
    82                     p.terminate()
       
    83                 except OSError:
       
    84                     pass
       
    85         threading.Thread(target=t).start()
    82         threading.Thread(target=t).start()
    86 
    83 
    87     return p
    84     return p
    88 
    85 
    89 # reserved exit code to skip test (used by hghave)
    86 # reserved exit code to skip test (used by hghave)
   341         if found:
   338         if found:
   342             vlog("# Found prerequisite", p, "at", found)
   339             vlog("# Found prerequisite", p, "at", found)
   343         else:
   340         else:
   344             print "WARNING: Did not find prerequisite tool: "+p
   341             print "WARNING: Did not find prerequisite tool: "+p
   345 
   342 
       
   343 def terminate(proc):
       
   344     """Terminate subprocess (with fallback for Python versions < 2.6)"""
       
   345     vlog('# Terminating process %d' % proc.pid)
       
   346     try:
       
   347         if hasattr(proc, 'terminate'):
       
   348             proc.terminate()
       
   349         else:
       
   350             os.kill(proc.pid, signal.SIGTERM)
       
   351     except OSError:
       
   352         pass
       
   353 
   346 def killdaemons():
   354 def killdaemons():
   347     # Kill off any leftover daemon processes
   355     # Kill off any leftover daemon processes
   348     try:
   356     try:
   349         fp = open(DAEMON_PIDS)
   357         fp = open(DAEMON_PIDS)
   350         for line in fp:
   358         for line in fp:
   649         ret = proc.wait()
   657         ret = proc.wait()
   650         return (ret, None)
   658         return (ret, None)
   651 
   659 
   652     proc = Popen4(cmd, wd, options.timeout)
   660     proc = Popen4(cmd, wd, options.timeout)
   653     def cleanup():
   661     def cleanup():
   654         try:
   662         terminate(proc)
   655             proc.terminate()
       
   656         except OSError:
       
   657             pass
       
   658         ret = proc.wait()
   663         ret = proc.wait()
   659         if ret == 0:
   664         if ret == 0:
   660             ret = signal.SIGTERM << 8
   665             ret = signal.SIGTERM << 8
   661         killdaemons()
   666         killdaemons()
   662         return ret
   667         return ret