
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
ÝPf\
  ã               @   sP   d dl mZ d dlZd dlZddlmZmZmZmZm	Z	m
Z
 G dd„ deƒZdS )é    )Úabsolute_importNé   )ÚLockBaseÚ
LockFailedÚ	NotLockedÚ	NotMyLockÚLockTimeoutÚAlreadyLockedc               @   s:   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚLinkLockFilez�Lock access to a file using atomic property of link(2).

    >>> lock = LinkLockFile('somefile')
    >>> lock = LinkLockFile('somefile', threaded=False)
    Nc             C   s"  yt | jdƒjƒ  W n" tk
r6   td| j ƒ‚Y nX |d k	rD|n| j}tjƒ }|d k	rj|dkrj||7 }x²ytj| j| j	ƒ W n” t
k
�r   tj| jƒj}|dkr¬d S |d k	ròtjƒ |kròtj| jƒ |dkrätd| j ƒ‚ntd| j ƒ‚tj|d k	�r
|d �pdƒ Y qlX d S qlW d S )	NÚwbzfailed to create %sr   é   z&Timeout waiting to acquire lock for %sz%s is already lockedé
   gš™™™™™¹?)ÚopenÚunique_nameÚcloseÚIOErrorr   ÚtimeoutÚtimeÚosÚlinkÚ	lock_fileÚOSErrorÚstatÚst_nlinkÚunlinkr   Úpathr	   Zsleep)Úselfr   Zend_timeZnlinks© r   ú"/usr/lib/python3.6/linklockfile.pyÚacquire   s0    
$zLinkLockFile.acquirec             C   sP   | j ƒ std| j ƒ‚ntjj| jƒs4td| j ƒ‚tj| jƒ tj| jƒ d S )Nz%s is not lockedz%s is locked, but not by me)	Ú	is_lockedr   r   r   Úexistsr   r   r   r   )r   r   r   r   Úrelease7   s    zLinkLockFile.releasec             C   s   t jj| jƒS )N)r   r   r!   r   )r   r   r   r   r    ?   s    zLinkLockFile.is_lockedc             C   s(   | j ƒ o&tjj| jƒo&tj| jƒjdkS )Nr   )r    r   r   r!   r   r   r   )r   r   r   r   Úi_am_lockingB   s    zLinkLockFile.i_am_lockingc             C   s   t jj| jƒrt j| jƒ d S )N)r   r   r!   r   r   )r   r   r   r   Ú
break_lockG   s    zLinkLockFile.break_lock)N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__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   r   Ú<module>   s    