???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................3
UˆŠZc  ã               @   s~   d dl Z d dlZd dlZd dlmZmZ d dlmZ d dlZG dd„ deƒZ	G dd„ dƒZ
dd	„ Zed
krzejeƒ pvd ƒ dS )é    N)ÚEWOULDBLOCKÚEEXIST)Úbstrc               @   s   e Zd ZdZdS )ÚLockfileLockedExceptionz$thrown ONLY when pid file is locked.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r
   r
   ú!/usr/lib/python3.6/rhnLockfile.pyr      s   r   c               @   s*   e Zd ZdZd	dd„Zdd„ Zdd„ ZdS )
ÚLockfilezïclass that provides simple access to a PID-style lockfile.

    methods: __init__(lockfile), acquire(), and release()
    NOTE: currently acquires upon init
    The *.pid file will be acquired, or an LockfileLockedException is raised.
    Nc             C   sÀ   t jjt jjt jj|ƒƒƒ| _|| _| js4t jƒ | _t jj| jƒ}t jj	|ƒs–yt j
|ƒ W n8 tk
r”   tjƒ d }t|dƒrŽ|jtkrŽn‚ Y nX t j| jt jt jB t jB ƒ| _| jƒ  dS )zlcreate (if need be), and acquire lock on lockfile

        lockfile example: '/var/run/up2date.pid'
        é   ÚerrnoN)ÚosÚpathÚabspathÚ
expanduserÚ
expandvarsÚlockfileÚpidÚgetpidÚdirnameÚexistsÚmakedirsÚOSErrorÚsysÚexc_infoÚhasattrr   r   ÚopenÚO_RDWRÚO_CREATÚO_SYNCÚfÚacquire)Úselfr   r   r   Úer
   r
   r   Ú__init__$   s"    
zLockfile.__init__c             C   s    yt j| jt jt jB ƒ W nD tk
r^   tjƒ d jt	krXt
d| j dtjƒ d ƒ‚n‚ Y nX t j | jt jdƒ tj| jdƒ tj| jtt| jƒd ƒƒ dS )z5acquire the lock; else raise LockfileLockedException.r   zcannot acquire lock on %s.Né   r   Ú
)ÚfcntlÚflockr"   ZLOCK_EXZLOCK_NBÚIOErrorr   r   r   r   r   r   ZF_SETFDr   Ú	ftruncateÚwriter   Ústrr   )r$   r
   r
   r   r#   E   s    zLockfile.acquirec             C   s,   t j| jƒ tj| jtjƒ t j| jƒ d S )N)r   Úunlinkr   r)   r*   r"   ZLOCK_UNÚclose)r$   r
   r
   r   ÚreleaseV   s    zLockfile.release)N)r   r   r   r	   r&   r#   r1   r
   r
   r
   r   r      s   
!r   c              C   sz   yt dƒ} W n6 tk
rB   tjjdtjƒ d  ƒ tjd
ƒ Y n4X tdƒ tdƒ ddl}|j	dƒ | j
ƒ  td	ƒ dS )z	test codez
./test.pidz%s
r   zlock acquired z...sleeping for 10 secondsr   Né
   zlock released éÿÿÿÿ)r   r   r   Ústderrr-   r   ÚexitÚprintÚtimeZsleepr1   )ÚLr7   r
   r
   r   Úmain]   s    
r9   Ú__main__)r   r   r)   r   r   r   Zrhn.i18nr   Ú	Exceptionr   r   r9   r   r5   r
   r
   r
   r   Ú<module>   s   B