<!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

  \                 @   s   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mZ ddlmZ dddgZ	G dd	 d	e
Ze ZejZejZejZejZd
d ZdS )    N   )spawn)utilensure_runningregister
unregisterc               @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )SemaphoreTrackerc             C   s   t j | _d | _d | _d S )N)	threadingZLock_lock_fd_pid)self r   9/usr/lib64/python3.6/multiprocessing/semaphore_tracker.py__init__   s    
zSemaphoreTracker.__init__c             C   s   | j   | jS )N)r   r   )r   r   r   r   getfd"   s    zSemaphoreTracker.getfdc       	      C   s  | j  | jdk	rRtj| jtj\}}|s0dS tj| j d| _d| _tjd g }y|j	t
jj  W n tk
r~   Y nX d}tj \}}zlyB|j	| tj }|gtj  }|d|| g7 }tj|||}W n   tj|  Y nX || _|| _W dtj| X W dQ R X dS )zMake sure that semaphore tracker process is running.

        This can be run from any process.  Usually a child process will use
        the semaphore created by its parent.NzWsemaphore_tracker: process died unexpectedly, relaunching.  Some semaphores might leak.z;from multiprocessing.semaphore_tracker import main;main(%d)z-c)r
   r   oswaitpidWNOHANGcloser   warningswarnappendsysstderrfileno	Exceptionpiper   Zget_executabler   Z_args_from_interpreter_flagsZspawnv_passfds)	r   pidZstatusZfds_to_passcmdrwZexeargsr   r   r   r   &   s8    





zSemaphoreTracker.ensure_runningc             C   s   | j d| dS )z2Register name of semaphore with semaphore tracker.ZREGISTERN)_send)r   namer   r   r   r   Q   s    zSemaphoreTracker.registerc             C   s   | j d| dS )z4Unregister name of semaphore with semaphore tracker.Z
UNREGISTERN)r#   )r   r$   r   r   r   r   U   s    zSemaphoreTracker.unregisterc             C   s@   | j   dj||jd}t|dkr.tdtj| j|}d S )Nz{0}:{1}
asciii   zname too long)r   formatencodelen
ValueErrorr   writer   )r   r   r$   msgnbytesr   r   r   r#   Y   s    zSemaphoreTracker._sendN)	__name__
__module____qualname__r   r   r   r   r   r#   r   r   r   r   r      s   +r   c          -   C   s  t j t jt j t j t jt j x6tjtjfD ]&}y|j  W q. tk
rR   Y q.X q.W t	 }zt
| d}x|D ]}yJ|j jd\}}|dkr|j| n |dkr|j| ntd| W qr tk
r   ytjtj   W n   Y nX Y qrX qrW W dQ R X W d|r<ytjdt|  W n tk
r:   Y nX xf|D ]^}zT|jd}ytj| W n6 tk
r } ztjd	||f  W Y dd}~X nX W dX qBW X dS )
zRun semaphore tracker.rb   :s   REGISTERs
   UNREGISTERzunrecognized command %rNzRsemaphore_tracker: There appear to be %d leaked semaphores to clean up at shutdownr%   zsemaphore_tracker: %r: %s)signalSIGINTSIG_IGNSIGTERMr   stdinstdoutr   r   setopenstripsplitaddremoveRuntimeError
excepthookexc_infor   r   r(   decode_multiprocessingZ
sem_unlink)fdfcacheliner   r$   er   r   r   maink   sJ    



(rH   )r   r2   r   r	   r   rB    r   r   __all__objectr   Z_semaphore_trackerr   r   r   r   rH   r   r   r   r   <module>   s   
I