comparison mercurial/commandserver.py @ 40894:dc9901558e3c

commandserver: extract handler of new socket connection This prepares for adding an IPC socket.
author Yuya Nishihara <yuya@tcha.org>
date Wed, 31 Oct 2018 22:02:38 +0900
parents e7110f44ee2d
children 9f00de4dc7cb
comparison
equal deleted inserted replaced
40893:e7110f44ee2d 40894:dc9901558e3c
563 if not ready: 563 if not ready:
564 # only exit if we completed all queued requests 564 # only exit if we completed all queued requests
565 if exiting: 565 if exiting:
566 break 566 break
567 continue 567 continue
568 self._acceptnewconnection(self._sock, selector)
569 selector.close()
570
571 def _acceptnewconnection(self, sock, selector):
572 h = self._servicehandler
573 if True:
568 try: 574 try:
569 conn, _addr = self._sock.accept() 575 conn, _addr = sock.accept()
570 except socket.error as inst: 576 except socket.error as inst:
571 if inst.args[0] == errno.EINTR: 577 if inst.args[0] == errno.EINTR:
572 continue 578 return
573 raise 579 raise
574 580
575 pid = os.fork() 581 pid = os.fork()
576 if pid: 582 if pid:
577 try: 583 try:
582 finally: 588 finally:
583 conn.close() # release handle in parent process 589 conn.close() # release handle in parent process
584 else: 590 else:
585 try: 591 try:
586 selector.close() 592 selector.close()
587 self._sock.close() 593 sock.close()
588 self._runworker(conn) 594 self._runworker(conn)
589 conn.close() 595 conn.close()
590 os._exit(0) 596 os._exit(0)
591 except: # never return, hence no re-raises 597 except: # never return, hence no re-raises
592 try: 598 try:
593 self.ui.traceback(force=True) 599 self.ui.traceback(force=True)
594 finally: 600 finally:
595 os._exit(255) 601 os._exit(255)
596 selector.close()
597 602
598 def _sigchldhandler(self, signal, frame): 603 def _sigchldhandler(self, signal, frame):
599 self._reapworkers(os.WNOHANG) 604 self._reapworkers(os.WNOHANG)
600 605
601 def _reapworkers(self, options): 606 def _reapworkers(self, options):