mercurial/commandserver.py
changeset 30887 a95fc01aaffe
parent 30519 20a42325fdef
child 30891 b1b36c6499c2
equal deleted inserted replaced
30886:2aaa8bfc7bd9 30887:a95fc01aaffe
   445             raise error.Abort(_('no socket path specified with --address'))
   445             raise error.Abort(_('no socket path specified with --address'))
   446         self._servicehandler = handler or unixservicehandler(ui)
   446         self._servicehandler = handler or unixservicehandler(ui)
   447         self._sock = None
   447         self._sock = None
   448         self._oldsigchldhandler = None
   448         self._oldsigchldhandler = None
   449         self._workerpids = set()  # updated by signal handler; do not iterate
   449         self._workerpids = set()  # updated by signal handler; do not iterate
       
   450         self._socketunlinked = None
   450 
   451 
   451     def init(self):
   452     def init(self):
   452         self._sock = socket.socket(socket.AF_UNIX)
   453         self._sock = socket.socket(socket.AF_UNIX)
   453         self._servicehandler.bindsocket(self._sock, self.address)
   454         self._servicehandler.bindsocket(self._sock, self.address)
   454         self._sock.listen(socket.SOMAXCONN)
   455         self._sock.listen(socket.SOMAXCONN)
   455         o = signal.signal(signal.SIGCHLD, self._sigchldhandler)
   456         o = signal.signal(signal.SIGCHLD, self._sigchldhandler)
   456         self._oldsigchldhandler = o
   457         self._oldsigchldhandler = o
   457         self._servicehandler.printbanner(self.address)
   458         self._servicehandler.printbanner(self.address)
       
   459         self._socketunlinked = False
       
   460 
       
   461     def _unlinksocket(self):
       
   462         if not self._socketunlinked:
       
   463             self._servicehandler.unlinksocket(self.address)
       
   464             self._socketunlinked = True
   458 
   465 
   459     def _cleanup(self):
   466     def _cleanup(self):
   460         signal.signal(signal.SIGCHLD, self._oldsigchldhandler)
   467         signal.signal(signal.SIGCHLD, self._oldsigchldhandler)
   461         self._sock.close()
   468         self._sock.close()
   462         self._servicehandler.unlinksocket(self.address)
   469         self._unlinksocket()
   463         # don't kill child processes as they have active clients, just wait
   470         # don't kill child processes as they have active clients, just wait
   464         self._reapworkers(0)
   471         self._reapworkers(0)
   465 
   472 
   466     def run(self):
   473     def run(self):
   467         try:
   474         try: