a
    ze!                     @   s   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 g dZe	edZ
ejejfZddd	 iZe jd
krd dlZd dlZeejejd 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
unregisterpthread_sigmaskZnoopc                   C   s   d S N r
   r
   r
   6/usr/lib/python3.9/multiprocessing/resource_tracker.py<lambda>!       r   posix)	semaphoreZshared_memoryc                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )ResourceTrackerc                 C   s   t  | _d | _d | _d S r	   )	threadingLock_lock_fd_pidselfr
   r
   r   __init__0   s    
zResourceTracker.__init__c                 C   sj   | j P | jd u r"W d    d S t| j d | _t| jd d | _W d    n1 s\0    Y  d S )Nr   )r   r   osclosewaitpidr   r   r
   r
   r   _stop5   s    
zResourceTracker._stopc                 C   s   |    | jS r	   )r   r   r   r
   r
   r   getfdB   s    zResourceTracker.getfdc                 C   s  | j  | jd ur~|  r,W d    d S t| j z| jd urRt| jd W n tyf   Y n0 d | _d | _t	d g }z|
tj  W n ty   Y n0 d}t \}}zz|
| t }|gt  }|d|| g7 }z:trttjt t|||}W tr@ttjt ntr>ttjt 0 W n   t|  Y n0 || _|| _W t| nt| 0 W d    n1 s0    Y  d S )Nr   zUresource_tracker: process died unexpectedly, relaunching.  Some resources might leak.z:from multiprocessing.resource_tracker import main;main(%d)z-c)r   r   _check_aliver   r   r   r   ChildProcessErrorwarningswarnappendsysstderrfileno	Exceptionpiper   Zget_executabler   _args_from_interpreter_flags_HAVE_SIGMASKsignalr   	SIG_BLOCK_IGNORED_SIGNALSspawnv_passfdsSIG_UNBLOCK)r   Zfds_to_passcmdrwZexeargspidr
   r
   r   r   F   sN    





zResourceTracker.ensure_runningc                 C   s0   zt | jd W n ty&   Y dS 0 dS d S )Ns   PROBE:0:noop
FT)r   writer   OSErrorr   r
   r
   r   r      s
    zResourceTracker._check_alivec                 C   s   |  d|| d S )NREGISTER_sendr   namertyper
   r
   r   r      s    zResourceTracker.registerc                 C   s   |  d|| d S )N
UNREGISTERr7   r9   r
   r
   r   r      s    zResourceTracker.unregisterc                 C   sB   |    d|||d}t|dkr0tdt| j|}d S )Nz{0}:{1}:{2}
asciii   zname too long)r   formatencodelen
ValueErrorr   r4   r   )r   r/   r:   r;   msgnbytesr
   r
   r   r8      s    zResourceTracker._sendN)__name__
__module____qualname__r   r   r   r   r   r   r   r8   r
   r
   r
   r   r   .   s   @r   c           
      C   s  t  t jt j t  t jt j tr2t t jt tj	tj
fD ]$}z|  W q> ty`   Y q>0 q>dd t D }zt| d}|D ]}z| dd\}}}t|d }|d u rtd| d| |dkr|| | n2|d	kr|| | n|d
krntd| W q tyR   ztjt   W n   Y n0 Y q0 qW d    n1 sl0    Y  W | D ]\}}|rztdt||f  W n ty   Y n0 |D ]X}zNzt| | W n8 ty }	 ztd||	f  W Y d }	~	n
d }	~	0 0 W n0 qqn| D ]\}}|rhztdt||f  W n tyf   Y n0 |D ]X}zNzt| | W n8 ty }	 ztd||	f  W Y d }	~	n
d }	~	0 0 W n0 qlq*0 d S )Nc                 S   s   i | ]}|t  qS r
   )set).0r;   r
   r
   r   
<dictcomp>   r   zmain.<locals>.<dictcomp>rbr=   :zCannot register z. for automatic cleanup: unknown resource type r6   r<   ZPROBEzunrecognized command %rzQresource_tracker: There appear to be %d leaked %s objects to clean up at shutdownzresource_tracker: %r: %s)r*   SIGINTSIG_IGNSIGTERMr)   r   r.   r,   r#   stdinstdoutr   r&   _CLEANUP_FUNCSkeysopenstripdecodesplitgetrA   addremoveRuntimeError
excepthookexc_infoitemsr    r!   r@   )
fdfcacheliner/   r:   r;   Zcleanup_funcZrtype_cacheer
   r
   r   main   s    

0

*

*rc   )r   r*   r#   r   r     r   r   __all__hasattrr)   rL   rN   r,   rQ   r:   _multiprocessingZ_posixshmemupdate
sem_unlinkZ
shm_unlinkobjectr   _resource_trackerr   r   r   r   rc   r
   r
   r
   r   <module>   s2   

w