diff --git a/b2/_internal/console_tool.py b/b2/_internal/console_tool.py index 48481234..1f25c054 100644 --- a/b2/_internal/console_tool.py +++ b/b2/_internal/console_tool.py @@ -923,8 +923,24 @@ def __enter__(self): return self def __exit__(self, exc_type, exc_val, exc_tb): - if sys.platform != 'darwin' or os.environ.get('B2_TEST_DISABLE_TQDM_CLOSER'): + if ( + sys.platform != 'darwin' + or sys.version_info < (3, 11) + or os.environ.get('B2_TEST_DISABLE_TQDM_CLOSER') + ): return + + # Tqdm sempaphore leaks do not seem to happen in MacOS 15.7.2, + # so we can skip the workaround starting from this version + try: + macos_version = platform.mac_ver()[0] + version_tuple = tuple(int(v) for v in macos_version.split('.')) + except (KeyError, ValueError): + pass + else: + if version_tuple and version_tuple >= (15, 7, 2): + return + try: from multiprocessing.synchronize import SemLock diff --git a/changelog.d/+tqdm-closer-new-macos.fixed.md b/changelog.d/+tqdm-closer-new-macos.fixed.md new file mode 100644 index 00000000..4b1f2ada --- /dev/null +++ b/changelog.d/+tqdm-closer-new-macos.fixed.md @@ -0,0 +1 @@ +Disable Tqdm semaphore leak workaround for MacOS >= 15.7.2, as apparently it is no longer an issue in newer versions. diff --git a/test/integration/test_tqdm_closer.py b/test/integration/test_tqdm_closer.py index 4ac29e8d..bcfee56f 100644 --- a/test/integration/test_tqdm_closer.py +++ b/test/integration/test_tqdm_closer.py @@ -7,15 +7,14 @@ # License https://www.backblaze.com/using_b2_code.html # ###################################################################### -import re import sys import pytest @pytest.mark.skipif( - (sys.platform != 'darwin') or ((sys.version_info.major, sys.version_info.minor) < (3, 11)), - reason='Tqdm closing error only occurs on OSX and python 3.11 or newer', + (sys.platform != 'darwin'), + reason='Tqdm closing error only occurs on OSX', ) def test_tqdm_closer(b2_tool, bucket, file_name): # test that stderr doesn't contain any warning, in particular warnings about multiprocessing resource tracker @@ -27,18 +26,3 @@ def test_tqdm_closer(b2_tool, bucket, file_name): f'b2://{bucket.name}/{file_name}', ] ) - - # test that disabling _TqdmCloser does produce a resource tracker warning. Should the following check ever fail, - # that would mean that either Tqdm or python fixed the issue and _TqdmCloser can be disabled for fixed versions - b2_tool.should_succeed( - [ - 'file', - 'cat', - f'b2://{bucket.name}/{file_name}', - ], - additional_env={'B2_TEST_DISABLE_TQDM_CLOSER': '1'}, - expected_stderr_pattern=re.compile( - r'UserWarning: resource_tracker: There appear to be \d+ leaked semaphore' - r' objects to clean up at shutdown' - ), - )