[PATCH 4 of 5] chgserver: add an explicit gc to trigger __del__

Jun Wu quark at fb.com
Tue Mar 15 05:58:35 EDT 2016


# HG changeset patch
# User Jun Wu <quark at fb.com>
# Date 1457996883 0
#      Mon Mar 14 23:08:03 2016 +0000
# Node ID 1dcd622a1f8ffdbfedad1a284dc09c5ea409712d
# Parent  c769f8196ccfdfa546862b0c4f608b78ca80a1c7
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 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.

diff --git a/hgext/chgserver.py b/hgext/chgserver.py
--- a/hgext/chgserver.py
+++ b/hgext/chgserver.py
@@ -45,6 +45,7 @@
 
 import SocketServer
 import errno
+import gc
 import inspect
 import os
 import re
@@ -588,6 +589,9 @@
                 cerr = commandserver.channeledoutput(self.wfile, 'e')
             traceback.print_exc(file=cerr)
             raise
+        finally:
+            # trigger __del__ since ForkingMixIn uses os._exit
+            gc.collect()
 
 def _reporoot(repo):
     if not repo:


More information about the Mercurial-devel mailing list