
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
ÝPf8
  ã               @   sL   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	 G dd„ deƒZ
dS )é    )Úabsolute_importNé   )ÚLockBaseÚ	NotLockedÚ	NotMyLockÚLockTimeoutÚAlreadyLockedc               @   sD   e Zd ZdZddd„Zddd„Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dS )ÚSymlinkLockFilez'Lock access to a file using symlink(2).TNc             C   s(   t j| |||ƒ tjj| jƒd | _d S )Nr   )r   Ú__init__ÚosÚpathÚsplitÚunique_name)Úselfr   ZthreadedÚtimeout© r   ú%/usr/lib/python3.6/symlinklockfile.pyr
      s    zSymlinkLockFile.__init__c             C   sÊ   |d k	r|n| j }tjƒ }|d k	r2|dkr2||7 }x’ytj| j| jƒ W nt tk
r¼   | jƒ rdd S |d k	ržtjƒ |krž|dkr�td| j	 ƒ‚nt
d| j	 ƒ‚tj|d k	r²|d ndƒ 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_fileÚOSErrorÚi_am_lockingr   r   r   Zsleep)r   r   Zend_timer   r   r   Úacquire   s$    
 zSymlinkLockFile.acquirec             C   s>   | j ƒ std| j ƒ‚n| jƒ s.td| j ƒ‚tj| 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
    zSymlinkLockFile.releasec             C   s   t jj| jƒS )N)r   r   Úislinkr   )r   r   r   r   r   =   s    zSymlinkLockFile.is_lockedc             C   s    t jj| jƒot j| jƒ| jkS )N)r   r   r   r   Úreadlinkr   )r   r   r   r   r   @   s    zSymlinkLockFile.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_lockD   s    zSymlinkLockFile.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   Ú<module>   s   