File: //lib/python3.6/site-packages/rhn/__pycache__/rhnLockfile.cpython-36.opt-1.pyc
3
0Q=j. � @ s� d dl Z d dlZd dlZd dlZd dlmZmZ d dlmZ d dlZG dd� de �Z
G dd� d�Zdd � Ze
d
kr�eje� p~d � dS )� N)�EWOULDBLOCK�EEXIST)�bstrc @ s e Zd ZdZdS )�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 Zd ZdZd dd�Zdd� Zdd� ZdS )
�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 jjt jjt jj|���| _|| _| js4t j� | _t jj| j�}t jj |�s�yt j
|� W n8 tk
r� tj
� d }t|d�r�|jtkr�n� Y nX t j| jt jt jB t jB t jB t jB d�| _t j| j�}tj|j� s�|jt j� k�rt j| j� td| jt j� |j|jf ��| j� dS )zlcreate (if need be), and acquire lock on lockfile
lockfile example: '/var/run/up2date.pid'
� �errnoi� zSrefusing to use lockfile %s: not a regular file owned by uid %d (mode 0o%o, uid %d)N) �os�path�abspath�
expanduser�
expandvars�lockfile�pid�getpid�dirname�exists�makedirs�OSError�sys�exc_info�hasattrr r �open�O_RDWR�O_CREAT�O_SYNC�
O_NOFOLLOW� O_CLOEXEC�f�fstat�stat�S_ISREG�st_mode�st_uid�geteuid�close�acquire)�selfr r r �e�str
r
r �__init__% s0
$ zLockfile.__init__c
C s� yt j| jt jt jB � W nD tk
r^ tj� d jt krXt
d| j dtj� d ��n� Y nX t j | jt jd� t
j| jd� t
j| jtt| j�d �� dS )z5acquire the lock; else raise LockfileLockedException.r
zcannot acquire lock on %s.N� r �
)�fcntl�flockr$ ZLOCK_EXZLOCK_NB�IOErrorr r r r r r ZF_SETFDr � ftruncate�writer �strr )r- r
r
r r, ^ s zLockfile.acquirec C s~ y4t j| j�}t j| j�}|j|jko0|j|jk}W n tk
rL d}Y nX |r^t j| j� t j
| jt j� t j| j� d S )NF)
r r% r$ �lstatr �st_dev�st_inor �unlinkr3 r4 ZLOCK_UNr+ )r- Zfd_stZpath_stZ
same_inoder
r
r �releaseo s
zLockfile.release)N)r r r r r0 r, r= r
r
r
r r s
9r c C sz yt d�} W n6 tk
rB tjjdtj� d � tjd
� Y n4X td� td� ddl}|j d� | j
� td � dS )z test codez
./test.pidz%s
r
zlock acquired z...sleeping for 10 secondsr N�
zlock released ���)r r r �stderrr7 r �exit�print�timeZsleepr= )�LrC r
r
r �main� s
rE �__main__)r r r&