Mercurial > public > mercurial-scm > hg-stable
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): |