Verrou exclusif pour retirer le lock aussi (et bloquant, mais bon)

darcs-hash:20050317083907-d1718-e7b5e1d000a89cc53efad2aabcc0a0041093d707.gz
This commit is contained in:
bernat 2005-03-17 09:39:07 +01:00
parent 09111d4ddb
commit 906418cf57

View file

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