<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
mic                 @   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