509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
©ft`Ê  ã               @   sÒ   d dl mZ d dl mZ d dlmZmZmZ d dlmZ d dl	m
Z
 d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZejdƒZdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ ZG dd„ deƒZdS )é    )Úabsolute_import)Úunicode_literals)ÚProcessLockErrorÚThreadLockErrorÚ	LockError)Ú_)ÚmiscNÚdnfc             C   s6   t jjƒ s2tj| jdƒƒjƒ }tjj	t
jƒ d|ƒ} | S )Nzutf-8Zlocks)r	   ÚutilZ	am_i_rootÚhashlibZsha1ÚencodeZ	hexdigestÚosÚpathÚjoinr   ZgetCacheDir)Zdir_Zhexdir© r   ú/usr/lib/python3.6/lock.pyÚ_fit_lock_dir&   s    
r   c             C   s   t tjjt| ƒdƒd| ƒS )Nzdownload_lock.pidÚcachedir)ÚProcessLockr   r   r   r   )r   Úexit_on_lockr   r   r   Úbuild_download_lock/   s    r   c             C   s   t tjjt| ƒdƒd| ƒS )Nzmetadata_lock.pidZmetadata)r   r   r   r   r   )r   r   r   r   r   Úbuild_metadata_lock3   s    r   c             C   s   t tjjt| ƒdƒd| ƒS )Nzrpmdb_lock.pidZRPMDB)r   r   r   r   r   )Z
persistdirr   r   r   r   Úbuild_rpmdb_lock8   s    r   c             C   s   t tjjt| ƒdƒd| ƒS )Nzlog_lock.pidÚlog)r   r   r   r   r   )Zlogdirr   r   r   r   Úbuild_log_lock=   s    r   c               @   s>   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ ZdS )r   Fc             C   s&   || _ d| _|| _|| _tjƒ | _d S )Nr   )ÚblockingÚcountÚdescriptionÚtargetÚ	threadingÚRLockÚthread_lock)Úselfr   r   r   r   r   r   Ú__init__C   s
    zProcessLock.__init__c             C   s2   | j jdd�s d| j }t|ƒ‚|  jd7  _d S )NF)r   z'%s already locked by a different threadé   )r!   Úacquirer   r   r   )r"   Úmsgr   r   r   Ú_lock_threadJ   s    
zProcessLock._lock_threadc              C   s>  t j| jt jt jB dƒ}�zytj|tjtjB ƒ W n4 t	k
rh } z|j
t
jkrVdS ‚ W Y d d }~X nX t j|dƒ}t|ƒdkrœt j|t|ƒjdƒƒ |S yt|ƒ}W n* tk
rÒ   tdƒ| j }t|ƒ‚Y nX ||krà|S t jd| t jƒ�s*t j|dt jƒ t j|dƒ t j|t|ƒjdƒƒ |S |S t j|ƒ X d S )	Ni¤  r$   é   r   zutf-8z–Malformed lock file found: %s.
Ensure no other dnf/yum process is running and remove the lock file manually or run systemd-tmpfiles --remove dnf.conf.z/proc/%d/statéÿÿÿÿ)r   Úopenr   ÚO_CREATÚO_RDWRÚfcntlZflockZLOCK_EXZLOCK_NBÚOSErrorÚerrnoZEWOULDBLOCKÚreadÚlenÚwriteÚstrr   ÚintÚ
ValueErrorr   r   ÚaccessÚF_OKÚlseekÚSEEK_SETÚ	ftruncateÚclose)r"   ÚpidÚfdÚeZold_pidr&   r   r   r   Ú	_try_lockP   s6    zProcessLock._try_lockc             C   s   |  j d8  _ | jjƒ  d S )Nr$   )r   r!   Úrelease)r"   r   r   r   Ú_unlock_threadz   s    zProcessLock._unlock_threadc             C   sª   t jjtjj| jƒƒ | jƒ  d}tjƒ }| j	|ƒ}xp||kr¤|dkrŽ| j
sl| jƒ  d| j|f }t||ƒ‚||krŽtdƒ| }tj|ƒ |}tjdƒ | j	|ƒ}q6W d S )Nr$   z%s already locked by %dz*Waiting for process with pid %d to finish.r)   r)   )r	   r
   Z
ensure_dirr   r   Údirnamer   r'   Úgetpidr?   r   rA   r   r   r   ÚloggerÚinfoÚtimeZsleep)r"   Zprev_pidZmy_pidr<   r&   r   r   r   Ú	__enter__~   s"    




zProcessLock.__enter__c             G   s"   | j dkrtj| jƒ | jƒ  d S )Nr$   )r   r   Úunlinkr   rA   )r"   Zexc_argsr   r   r   Ú__exit__‘   s    
zProcessLock.__exit__N)F)	Ú__name__Ú
__module__Ú__qualname__r#   r'   r?   rA   rG   rI   r   r   r   r   r   B   s   
*r   )Z
__future__r   r   Zdnf.exceptionsr   r   r   Zdnf.i18nr   Zdnf.yumr   Zdnf.loggingr	   Zdnf.utilr/   r-   r   Zloggingr   r   rF   Z	getLoggerrD   r   r   r   r   r   Úobjectr   r   r   r   r   Ú<module>   s(   
	