vfs: modernize the detection of the main thread
There weren't a lot of good choices when py27 was supported, but starting with
py34, `threading.main_thread()` is available. This gets us away from an
undocumented, internal symbol, and drops a pytype suppression statement. It is
also apparently no longer reliable after a process fork.[1][2]
[1] https://stackoverflow.com/a/
23207116
[2] https://github.com/python/cpython/blob/v3.6.3/Lib/threading.py#L1334
--- a/mercurial/vfs.py Sun Sep 22 17:06:31 2024 -0400
+++ b/mercurial/vfs.py Thu Sep 19 21:03:10 2024 -0400
@@ -373,10 +373,7 @@
# 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.current_thread(),
- threading._MainThread, # pytype: disable=module-attr
- ):
+ if threading.current_thread() is not threading.main_thread():
yield
return
vfs = getattr(self, 'vfs', self)
@@ -575,9 +572,9 @@
)
fp = checkambigatclosing(fp)
- if backgroundclose and isinstance(
- threading.current_thread(),
- threading._MainThread, # pytype: disable=module-attr
+ if (
+ backgroundclose
+ and threading.current_thread() is threading.main_thread()
):
if (
not self._backgroundfilecloser # pytype: disable=attribute-error