a UˆŠZc ã@s~ddlZddlZddlZddlmZmZddlmZddlZGdd„deƒZ Gdd„dƒZ dd „Z e d krze  e ƒpvd¡dS) éN)Ú EWOULDBLOCKÚEEXIST)Úbstrc@seZdZdZdS)ÚLockfileLockedExceptionz$thrown ONLY when pid file is locked.N)Ú__name__Ú __module__Ú __qualname__Ú__doc__©r r ú3/usr/lib/python3.9/site-packages/rhn/rhnLockfile.pyrsrc@s*eZdZdZd 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. NcCs¾tj tj tj |¡¡¡|_||_|js4t ¡|_tj |j¡}tj  |¡s”zt  |¡Wn6t y’t   ¡d}t|dƒrŒ|jtkrŒn‚Yn0t |jtjtjBtjB¡|_| ¡dS)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ÚhasattrrrÚopenÚO_RDWRÚO_CREATÚO_SYNCÚfÚacquire)ÚselfrrrÚer r r Ú__init__$s& ÿÿ    zLockfile.__init__cCsžzt |jtjtjB¡WnBty\t ¡djt krVt d|j dt ¡dƒ‚n‚Yn0t |jtj d¡t  |jd¡t  |jtt|jƒdƒ¡dS)z5acquire the lock; else raise LockfileLockedException.r zcannot acquire lock on %s.NérÚ )ÚfcntlÚflockr"ZLOCK_EXZLOCK_NBÚIOErrorrrrrrrZF_SETFDrÚ ftruncateÚwriterÚstrr©r$r r r r#Es ÿzLockfile.acquirecCs,t |j¡t |jtj¡t |j¡dS)N)rÚunlinkrr)r*r"ZLOCK_UNÚcloser/r r r ÚreleaseVs zLockfile.release)N)rrrr r&r#r2r r r r r s !r cCsxz tdƒ}Wn4ty@tj dt ¡d¡t d¡Yn40tdƒtdƒddl}|  d ¡|  ¡td ƒdS) z test codez ./test.pidz%s r éÿÿÿÿzlock acquired z...sleeping for 10 secondsrNé zlock released ) r rrÚstderrr-rÚexitÚprintÚtimeÚsleepr2)ÚLr8r r r Úmain]s   r;Ú__main__)rrr)rrrZrhn.i18nrÚ Exceptionrr r;rr6r r r r Ús B