File: //lib64/python3.9/multiprocessing/__pycache__/resource_tracker.cpython-39.opt-2.pyc
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<