chgserver: add an explicit gc to trigger __del__
SocketServer.ForkingMixIn uses os._exit which will skip all cleanup handlers.
We want to run __del__ to make things like transactions, {ssh,http}peer,
atomictempfile, dirstateguard, etc. work.
This patch adds a "gc.collect()" to trigger __del__. It is helpful for chg
to pass some test cases in test-devel-warnings.t.
--- a/hgext/chgserver.py Tue Mar 15 10:36:02 2016 +0000
+++ b/hgext/chgserver.py Mon Mar 14 23:08:03 2016 +0000
@@ -42,6 +42,7 @@
import SocketServer
import errno
+import gc
import inspect
import os
import re
@@ -569,6 +570,9 @@
cerr = commandserver.channeledoutput(self.wfile, 'e')
traceback.print_exc(file=cerr)
raise
+ finally:
+ # trigger __del__ since ForkingMixIn uses os._exit
+ gc.collect()
def _tempaddress(address):
return '%s.%d.tmp' % (address, os.getpid())