equal
deleted
inserted
replaced
176 self.cout = channeledoutput(fout, 'o') |
176 self.cout = channeledoutput(fout, 'o') |
177 self.cin = channeledinput(fin, fout, 'I') |
177 self.cin = channeledinput(fin, fout, 'I') |
178 self.cresult = channeledoutput(fout, 'r') |
178 self.cresult = channeledoutput(fout, 'r') |
179 |
179 |
180 self.client = fin |
180 self.client = fin |
|
181 |
|
182 def cleanup(self): |
|
183 """release and restore resources taken during server session""" |
|
184 pass |
181 |
185 |
182 def _read(self, size): |
186 def _read(self, size): |
183 if not size: |
187 if not size: |
184 return '' |
188 return '' |
185 |
189 |
327 fin, fout = _protectio(ui) |
331 fin, fout = _protectio(ui) |
328 try: |
332 try: |
329 sv = server(ui, self.repo, fin, fout) |
333 sv = server(ui, self.repo, fin, fout) |
330 return sv.serve() |
334 return sv.serve() |
331 finally: |
335 finally: |
|
336 sv.cleanup() |
332 _restoreio(ui, fin, fout) |
337 _restoreio(ui, fin, fout) |
333 |
338 |
334 class _requesthandler(socketserver.StreamRequestHandler): |
339 class _requesthandler(socketserver.StreamRequestHandler): |
335 def handle(self): |
340 def handle(self): |
336 ui = self.server.ui |
341 ui = self.server.ui |
346 except IOError as inst: |
351 except IOError as inst: |
347 if inst.errno != errno.EPIPE: |
352 if inst.errno != errno.EPIPE: |
348 raise |
353 raise |
349 except KeyboardInterrupt: |
354 except KeyboardInterrupt: |
350 pass |
355 pass |
|
356 finally: |
|
357 sv.cleanup() |
351 except: # re-raises |
358 except: # re-raises |
352 # also write traceback to error channel. otherwise client cannot |
359 # also write traceback to error channel. otherwise client cannot |
353 # see it because it is written to server's stderr by default. |
360 # see it because it is written to server's stderr by default. |
354 if sv: |
361 if sv: |
355 cerr = sv.cerr |
362 cerr = sv.cerr |