PATH:
lib
/
python3.6
/
site-packages
/
rhn
/
__pycache__
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&