From 7e30b65744b543237bf5657fd6014a16b112dde4 Mon Sep 17 00:00:00 2001 From: Fabio Erculiani Date: Sun, 8 Dec 2013 16:33:29 +0100 Subject: [PATCH] [entropy.locks] _file_lock_create: beautify, open O_CREAT | O_RDONLY if shared mode --- lib/entropy/locks.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/lib/entropy/locks.py b/lib/entropy/locks.py index 6bf772cf6..a94a2bddc 100644 --- a/lib/entropy/locks.py +++ b/lib/entropy/locks.py @@ -191,21 +191,25 @@ class _GenericResourceLock(object): ref_obj.close() mapped['ref'] = None - def _file_lock_create(self, pidfile, blocking=False, shared=False): + def _file_lock_create(self, lock_path, blocking=False, shared=False): """ Create and allocate the lock file pointed by lock_data structure. """ - lockdir = os.path.dirname(pidfile) + lock_dir = os.path.dirname(lock_path) try: - os.makedirs(lockdir, 0o775) + os.makedirs(lock_dir, 0o775) except OSError as err: if err.errno != errno.EEXIST: raise - const_setup_directory(lockdir) + const_setup_directory(lock_dir) try: - pid_f = open(pidfile, "a+") - except IOError as err: + fmode = 0o664 + if shared: + fd = os.open(lock_path, os.O_CREAT | os.O_RDONLY, fmode) + else: + fd = os.open(lock_path, os.O_CREAT | os.O_APPEND, fmode) + except OSError as err: if err.errno in (errno.ENOENT, errno.EACCES): # cannot get lock or dir doesn't exist return False, None @@ -213,11 +217,11 @@ class _GenericResourceLock(object): # ensure that entropy group can write on that try: - const_setup_file(pidfile, etpConst['entropygid'], 0o664) + const_setup_file(lock_path, etpConst['entropygid'], 0o664) except OSError: pass - flock_f = FlockFile(pidfile, fobj = pid_f) + flock_f = FlockFile(lock_path, fd=fd) if blocking: if shared: flock_f.acquire_shared()