From 906418cf57f4b5841efae35c7accabd6fcf03493 Mon Sep 17 00:00:00 2001 From: bernat Date: Thu, 17 Mar 2005 09:39:07 +0100 Subject: [PATCH] Verrou exclusif pour retirer le lock aussi (et bloquant, mais bon) darcs-hash:20050317083907-d1718-e7b5e1d000a89cc53efad2aabcc0a0041093d707.gz --- gestion/lock.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/gestion/lock.py b/gestion/lock.py index 76aab76e..092d17d4 100755 --- a/gestion/lock.py +++ b/gestion/lock.py @@ -144,8 +144,20 @@ def make_lock(lock_name, lock_comment='',nowait=0, quiet=False) : def remove_lock( lock_name ) : """ Destruction du lock """ + # On créé une zone d'exclusion lock_dir = '/var/lock/gestion' lock_file = "%s/%s" % (lock_dir, lock_name) + + lock_fd_dl=open("%s-dotlock" % lock_file, "w") + # On demande un verrou exclusif + try: + lockf(lock_fd_dl, LOCK_EX | LOCK_NB) + except IOError, e: + if e.errno not in [errno.EACCES, errno.EAGAIN]: + raise + # Déjà locké + time.sleep(0.5) + return remove_lock(lock_name) try : fd = open(lock_file, "r") if fd.readline().strip()=="%s" % os.getpid(): @@ -153,3 +165,7 @@ def remove_lock( lock_name ) : fd.close() except : pass + + # On enleve le verrou système + lockf(lock_fd_dl, LOCK_UN) + lock_fd_dl.close()