Mercurial > ~astiob > upreckon > hgweb
comparison unix.py @ 124:19c42a3cd962
Very fast testees no longer break Popen on some UNIX systems on Python 2.6+
author | Oleg Oshmyan <chortos@inbox.lv> |
---|---|
date | Sun, 24 Apr 2011 20:05:20 +0100 |
parents | 90c002c960cb |
children | fcdcd0c95552 |
comparison
equal
deleted
inserted
replaced
123:90c002c960cb | 124:19c42a3cd962 |
---|---|
48 from signal import SIGCHLD, SIG_DFL, signal, set_wakeup_fd | 48 from signal import SIGCHLD, SIG_DFL, signal, set_wakeup_fd |
49 from select import select, error as SelectError | 49 from select import select, error as SelectError |
50 from errno import EAGAIN, EINTR | 50 from errno import EAGAIN, EINTR |
51 from fcntl import fcntl, F_SETFD, F_GETFD, F_SETFL, F_GETFL | 51 from fcntl import fcntl, F_SETFD, F_GETFD, F_SETFL, F_GETFL |
52 from os import O_NONBLOCK | 52 from os import O_NONBLOCK |
53 try: | |
54 from signal import siginterrupt | |
55 except ImportError: | |
56 # Sucks. | |
57 siginterrupt = lambda signalnum, flag: None | |
53 try: | 58 try: |
54 import cPickle as pickle | 59 import cPickle as pickle |
55 except ImportError: | 60 except ImportError: |
56 import pickle | 61 import pickle |
57 except ImportError: | 62 except ImportError: |
150 except OSError: | 155 except OSError: |
151 if sys.exc_info()[1].errno == EAGAIN: | 156 if sys.exc_info()[1].errno == EAGAIN: |
152 break | 157 break |
153 else: | 158 else: |
154 raise | 159 raise |
160 siginterrupt(SIGCHLD, False) | |
155 try: | 161 try: |
156 case.process = Popen(*args, **kwargs) | 162 case.process = Popen(*args, **kwargs) |
157 except OSError: | 163 except OSError: |
158 os.close(read) | 164 os.close(read) |
159 raise testcases.CannotStartTestee(sys.exc_info()[1]) | 165 raise testcases.CannotStartTestee(sys.exc_info()[1]) |
160 finally: | 166 finally: |
167 siginterrupt(SIGCHLD, True) | |
161 os.close(write) | 168 os.close(write) |
162 try: | 169 try: |
163 if not catch_escape: | 170 if not catch_escape: |
164 if case.maxwalltime: | 171 if case.maxwalltime: |
165 try: | 172 try: |