a
�DOg�! � @ s� d dl Z d dlZd dlZd dlZd dlZddlmZ ddlmZ g d�Ze ed�Z
ejejfZ
ddd � iZe jd
kr�d dlZd dlZe�ejejd�� G dd
� d
e�Ze� ZejZejZejZejZdd� ZdS )� N� )�spawn)�util)�ensure_running�register�
unregister�pthread_sigmaskZnoopc C s d S �N� r
r
r
�8/usr/lib64/python3.9/multiprocessing/resource_tracker.py�<lambda>! � r �posix)� semaphoreZ
shared_memoryc @ sL e Zd Zdd� Zdd� Zdd� Zdd� Zd d
� Zdd� Zd
d� Z dd� Z
dS )�ResourceTrackerc C s t �� | _d | _d | _d S r )� threading�Lock�_lock�_fd�_pid��selfr
r
r �__init__0 s
zResourceTracker.__init__c C sj | j �P | jd u r"W d � d S t�| j� d | _t�| jd� d | _W d � n1 s\0 Y d S )Nr )r r �os�close�waitpidr r r
r
r �_stop5 s
zResourceTracker._stopc C s | � � | jS r )r r r r
r
r �getfdB s zResourceTracker.getfdc C s� | j ��� | jd ur~| �� r,W d � d S t�| j� z| jd urRt�| jd� W n tyf Y n0 d | _d | _t� d� g }z|�
tj�
� � W n ty� Y n0 d}t�� \}}z�z�|�
|� t�� }|gt�� }|d|| g7 }z:t�rt�tjt� t�|||�}W t�r@t�tjt� nt�r>t�tjt� 0 W n t�|� � Y n0 || _|| _W t�|� nt�|� 0 W d � n1 �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 Zget_executabler �_args_from_interpreter_flags�
_HAVE_SIGMASK�signalr � SIG_BLOCK�_IGNORED_SIGNALS�spawnv_passfds�SIG_UNBLOCK)r Zfds_to_pass�cmd�r�wZexe�args�pidr
r
r r F sN
�
zResourceTracker.ensure_runningc C s0 zt �| jd� W n ty& Y dS 0 dS d S )Ns
PROBE:0:noop
FT)r �writer �OSErrorr r
r
r r � s
zResourceTracker._check_alivec C s | � d||� d S )N�REGISTER��_send�r �name�rtyper
r
r r � s zResourceTracker.registerc C s | � d||� d S )N�
UNREGISTERr7 r9 r
r
r r � s zResourceTracker.unregisterc C sB | � � d�|||��d�}t|�dkr0td��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 zResourceTracker._sendN)�__name__�
__module__�__qualname__r r r r r r r r8 r
r
r
r r . s
@r c
C s� t � t jt j� t � t jt j� tr2t �t jt� tj tj
fD ]$}z|�� W q> ty` Y q>0 q>dd� t
�� D �}�z�t| d���}|D ]�}z�|�� �d��d�\}}}t
�|d �}|d u r�td|� d|� ���|dkr�|| �|� n2|d k�r|| �|� n|d
k�rntd| ��W q� t�yR ztjt�� � W n Y n0 Y q�0 q�W d � n1 �sl0 Y W |�� D ]�\}}|�r�zt�dt|�|f � W n t�y� Y n0 |D ]X}zNzt
| |� W n8 t�y } zt�d
|| f � W Y d } ~ n
d } ~ 0 0 W n0 �qq�n�|�� D ]�\}}|�rhzt�dt|�|f � W n t�yf Y n0 |D ]X}zNzt
| |� W n8 t�y� } zt�d
|| f � W Y d } ~ n
d } ~ 0 0 W n0 �ql�q*0 d S )Nc S s i | ]}|t � �qS r
)�set)�.0r; r
r
r �
<dictcomp>� r
zmain.<locals>.<dictcomp>�rbr= �:zCannot register z. for automatic cleanup: unknown resource type r6 r<