mirror of
https://github.com/facebook/sapling.git
synced 2024-10-11 01:07:15 +03:00
e9776efcd7
Summary: Resolve pyflakes issues caused by patchpython. Test Plan: `arc unit` Reviewers: #sourcecontrol, durham Reviewed By: durham Subscribers: mjpieters Differential Revision: https://phabricator.intern.facebook.com/D4051110 Signature: t1:4051110:1476985498:3582ddf70780537a7902fece3ab847bc9effd744
64 lines
1.7 KiB
Python
64 lines
1.7 KiB
Python
import errno
|
|
import os
|
|
import signal
|
|
import socket
|
|
import sys
|
|
import time
|
|
try:
|
|
import SocketServer
|
|
except ImportError:
|
|
# Python 3
|
|
import socketserver as SocketServer
|
|
|
|
# Make sure we use patchpython.py in this repo, unaffected by PYTHONPATH
|
|
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../hgext3rd'))
|
|
import patchpython
|
|
|
|
assert patchpython # pass pyflakes "import but unused" check
|
|
|
|
def testnozombies():
|
|
class reportpidhandler(SocketServer.StreamRequestHandler):
|
|
def handle(self):
|
|
self.wfile.write('%s' % (os.getpid(),))
|
|
|
|
class server(SocketServer.ForkingMixIn, SocketServer.UnixStreamServer):
|
|
pass
|
|
|
|
socketpath = 'testsocket'
|
|
pid = os.fork()
|
|
|
|
if pid > 0:
|
|
# client
|
|
waittime = 0
|
|
while not os.path.exists(socketpath):
|
|
time.sleep(0.1)
|
|
waittime += 0.1
|
|
if waittime > 5:
|
|
assert False, 'server timed out'
|
|
try:
|
|
pids = []
|
|
for i in xrange(5):
|
|
s = socket.socket(socket.AF_UNIX)
|
|
s.connect(socketpath)
|
|
buf = s.recv(1024)
|
|
s.close()
|
|
pids.append(int(buf))
|
|
# give the server some time to do cleanup
|
|
time.sleep(0.5)
|
|
for p in pids:
|
|
try:
|
|
os.kill(p, 0)
|
|
assert False, 'zombie process detected'
|
|
except OSError as ex:
|
|
if ex.errno != errno.ESRCH:
|
|
raise
|
|
finally:
|
|
os.kill(pid, signal.SIGTERM) # stop server
|
|
os.unlink(socketpath)
|
|
else:
|
|
# server
|
|
s = server(socketpath, reportpidhandler)
|
|
s.serve_forever(poll_interval=0.1)
|
|
|
|
testnozombies()
|