£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
3
۔*jc                 @   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 )
Lockfilezclass 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	|syt j
| W n8 tk
r   tj d }t|dr|jtkrn 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