diff --git a/mercurial/ui.py b/mercurial/ui.py
index 8c9b08a0c48c686633e6a1bd3418d718bf14bd73_bWVyY3VyaWFsL3VpLnB5..e9f320a40b44fd324ec38d8c6cd64ed76ebecf9c_bWVyY3VyaWFsL3VpLnB5 100644
--- a/mercurial/ui.py
+++ b/mercurial/ui.py
@@ -183,6 +183,9 @@
 # retrieving configuration value.
 _unset = object()
 
+# _reqexithandlers: callbacks run at the end of a request
+_reqexithandlers = []
+
 class ui(object):
     def __init__(self, src=None):
         """Create a fresh new ui object if no src given
@@ -193,8 +196,6 @@
         """
         # _buffers: used for temporary capture of output
         self._buffers = []
-        # _exithandlers: callbacks run at the end of a request
-        self._exithandlers = []
         # 3-tuple describing how each buffer in the stack behaves.
         # Values are (capture stderr, capture subprocesses, apply labels).
         self._bufferstates = []
@@ -220,7 +221,6 @@
         self._styles = {}
 
         if src:
-            self._exithandlers = src._exithandlers
             self.fout = src.fout
             self.ferr = src.ferr
             self.fin = src.fin
@@ -1098,6 +1098,10 @@
 
         return True
 
+    @property
+    def _exithandlers(self):
+        return _reqexithandlers
+
     def atexit(self, func, *args, **kwargs):
         '''register a function to run after dispatching a request