diff --git a/docs/changelog.rst b/docs/changelog.rst index 6ac0f1b..6050340 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -1,5 +1,9 @@ Changelog ========= +v3.10.2 (2023-03-22) +-------------------- +- Bug fix for using filelock with threaded programs causing undesired file permissions - by :user:`jahrules`. + v3.10.1 (2023-03-22) -------------------- - Handle pickle for :class:`filelock.Timeout` :pr:`203` - by :user:`TheMatt2`. diff --git a/src/filelock/_api.py b/src/filelock/_api.py index 8018ccc..50f1c3d 100644 --- a/src/filelock/_api.py +++ b/src/filelock/_api.py @@ -179,11 +179,7 @@ def acquire( with self._thread_lock: if not self.is_locked: _LOGGER.debug("Attempting to acquire lock %s on %s", lock_id, lock_filename) - previous_umask = os.umask(0) - try: - self._acquire() - finally: - os.umask(previous_umask) # reset umask to initial value + self._acquire() if self.is_locked: _LOGGER.debug("Lock %s acquired on %s", lock_id, lock_filename) break diff --git a/src/filelock/_unix.py b/src/filelock/_unix.py index 6a71d8c..2016123 100644 --- a/src/filelock/_unix.py +++ b/src/filelock/_unix.py @@ -32,7 +32,8 @@ class UnixFileLock(BaseFileLock): def _acquire(self) -> None: open_flags = os.O_RDWR | os.O_CREAT | os.O_TRUNC - fd = os.open(self._lock_file, open_flags, self._mode) + fd = os.open(self._lock_file, open_flags) + os.chmod(fd, self._mode) try: fcntl.flock(fd, fcntl.LOCK_EX | fcntl.LOCK_NB) except OSError: diff --git a/tests/test_filelock.py b/tests/test_filelock.py index 27dc433..c9dd600 100644 --- a/tests/test_filelock.py +++ b/tests/test_filelock.py @@ -440,7 +440,10 @@ def test_lock_mode_soft(tmp_path: Path) -> None: assert lock.is_locked mode = filemode(os.stat(lock_path).st_mode) - assert mode == "-rw-rw-rw-" + if sys.platform == "win32": + assert mode == "-rw-rw-rw-" + else: + assert mode == "-rw-r--r--" lock.release()