From dd8aa42c17f583fd78cbcea4c57a3cc8bd514a60 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 24 Jun 2021 08:57:22 +0530 Subject: [PATCH] Fix some resourcewarnings in the test suite --- setup/__init__.py | 5 +++-- src/calibre/utils/lock.py | 2 ++ src/calibre/utils/test_lock.py | 18 ++++++++++++++---- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/setup/__init__.py b/setup/__init__.py index 52a1ff5788..912097bf17 100644 --- a/setup/__init__.py +++ b/setup/__init__.py @@ -98,8 +98,9 @@ def initialize_constants(): __version__ = '%s.%s.%s'%(nv.group(1), nv.group(2), nv.group(3)) __appname__ = re.search(r'__appname__\s+=\s+(u{0,1})[\'"]([^\'"]+)[\'"]', src).group(2) - epsrc = re.compile(r'entry_points = (\{.*?\})', re.DOTALL).\ - search(open(os.path.join(SRC, 'calibre/linux.py'), 'rb').read().decode('utf-8')).group(1) + with open(os.path.join(SRC, 'calibre/linux.py'), 'rb') as sf: + epsrc = re.compile(r'entry_points = (\{.*?\})', re.DOTALL).\ + search(sf.read().decode('utf-8')).group(1) entry_points = eval(epsrc, {'__appname__': __appname__}) def e2b(ep): diff --git a/src/calibre/utils/lock.py b/src/calibre/utils/lock.py index 34ae2ef85c..2d5094e0d5 100644 --- a/src/calibre/utils/lock.py +++ b/src/calibre/utils/lock.py @@ -148,6 +148,7 @@ elif islinux: try: eintr_retry_call(sock.bind, address) except socket.error as err: + sock.close() if getattr(err, 'errno', None) == errno.EADDRINUSE: return raise @@ -181,6 +182,7 @@ else: eintr_retry_call(fcntl.lockf, f.fileno(), fcntl.LOCK_EX | fcntl.LOCK_NB) return partial(_clean_lock_file, f) except EnvironmentError as err: + f.close() if err.errno not in (errno.EAGAIN, errno.EACCES): raise diff --git a/src/calibre/utils/test_lock.py b/src/calibre/utils/test_lock.py index 6de40caa18..84f6a55b6d 100644 --- a/src/calibre/utils/test_lock.py +++ b/src/calibre/utils/test_lock.py @@ -130,6 +130,7 @@ class IPCLockTest(unittest.TestCase): while not os.path.exists('ready'): time.sleep(0.01) child.kill() + child.wait() release_mutex = create_single_instance_mutex('test') self.assertIsNotNone(release_mutex) release_mutex() @@ -166,13 +167,22 @@ def other1(): def other2(): release_mutex = create_single_instance_mutex('test') - raise SystemExit(0 if release_mutex is None else 1) + if release_mutex is None: + ret = 0 + else: + ret = 1 + release_mutex() + raise SystemExit(ret) def other3(): - create_single_instance_mutex('test') - os.mkdir('ready') - time.sleep(30) + release_mutex = create_single_instance_mutex('test') + try: + os.mkdir('ready') + time.sleep(30) + finally: + if release_mutex is not None: + release_mutex() def other4():