3 ÓXj. ã @ 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&