3
Pf8
@ sL d dl mZ d dlZd dlZddlmZmZmZmZm Z G dd deZ
dS ) )absolute_importN )LockBase NotLocked NotMyLockLockTimeout
AlreadyLockedc @ sD e Zd ZdZdddZdddZdd Zd
d Zdd
Zdd Z dS )SymlinkLockFilez'Lock access to a file using symlink(2).TNc C s( t j| ||| tjj| jd | _d S )Nr )r __init__ospathsplitunique_name)selfr Zthreadedtimeout r %/usr/lib/python3.6/symlinklockfile.pyr
s zSymlinkLockFile.__init__c C s |d k r|n| j }tj }|d k r2|dkr2||7 }xytj| j| j W nt tk
r | j rdd S |d k rtj |kr|dkrtd| j nt
d| j tj|d k r|d nd Y q4X d S q4W d S )Nr z&Timeout waiting to acquire lock for %sz%s is already locked
g?)r timer symlinkr lock_fileOSErrori_am_lockingr r r Zsleep)r r Zend_timer r r acquire s$
zSymlinkLockFile.acquirec C s> | j std| j n| j s.td| j tj| j d S )Nz%s is not lockedz%s is locked, but not by me) is_lockedr r r r r unlinkr )r r r r release6 s
zSymlinkLockFile.releasec C s t jj| jS )N)r r islinkr )r r r r r = s zSymlinkLockFile.is_lockedc C s t jj| jot j| j| jkS )N)r r r r readlinkr )r r r r r @ s zSymlinkLockFile.i_am_lockingc C s t jj| jrt j| j d S )N)r r r r r )r r r r
break_lockD s zSymlinkLockFile.break_lock)TN)N)
__name__
__module____qualname____doc__r
r r r r r r r r r r
s
#r )Z
__future__r r r r r r r r r r r r r