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()