a
    &Rîh¥!  ã                   @   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r˜d 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
   úH/opt/python-3.9.24/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 ¡ \}}zºz†| 
|¡ 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 s˜0    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 ƒ}z¨t| dƒà}|D ]Ê}z| ¡  d¡ d¡\}}}t |d ¡}|d u rÒt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 qŠ0 qŠW d   ƒ n1 sl0    Y  W | ¡ D ]ž\}}|r¾z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Âq€nª| ¡ 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