D1457: workers: don't use backgroundfilecloser in threads
wlis (Wojciech Lis)
phabricator at mercurial-scm.org
Fri Dec 15 17:13:36 UTC 2017
This revision was automatically updated to reflect the committed changes.
Closed by commit rHG60f2a215faa7: workers: don't use backgroundfilecloser in threads (authored by wlis, committed by ).
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D1457?vs=4386&id=4484
REVISION DETAIL
https://phab.mercurial-scm.org/D1457
AFFECTED FILES
mercurial/vfs.py
CHANGE DETAILS
diff --git a/mercurial/vfs.py b/mercurial/vfs.py
--- a/mercurial/vfs.py
+++ b/mercurial/vfs.py
@@ -277,8 +277,12 @@
to ``__call__``/``open`` to result in the file possibly being closed
asynchronously, on a background thread.
"""
- # This is an arbitrary restriction and could be changed if we ever
- # have a use case.
+ # Sharing backgroundfilecloser between threads is complex and using
+ # multiple instances puts us at risk of running out of file descriptors
+ # only allow to use backgroundfilecloser when in main thread.
+ if not isinstance(threading.currentThread(), threading._MainThread):
+ yield
+ return
vfs = getattr(self, 'vfs', self)
if getattr(vfs, '_backgroundfilecloser', None):
raise error.Abort(
@@ -413,7 +417,8 @@
' valid for checkambig=True') % mode)
fp = checkambigatclosing(fp)
- if backgroundclose:
+ if (backgroundclose and
+ isinstance(threading.currentThread(), threading._MainThread)):
if not self._backgroundfilecloser:
raise error.Abort(_('backgroundclose can only be used when a '
'backgroundclosing context manager is active')
To: wlis, #hg-reviewers, indygreg, krbullock
Cc: krbullock, durin42, indygreg, mercurial-devel
More information about the Mercurial-devel
mailing list