File: //lib64/python3.9/multiprocessing/__pycache__/popen_forkserver.cpython-39.opt-1.pyc
a
    �DOg�  �                   @   s�   d dl Z d dlZddlmZmZ ejs.ed��ddlmZ ddlm	Z	 ddlm
Z
 ddlmZ d	gZG d
d� de
�ZG dd	� d	e	j�ZdS )
�    N�   )�	reduction�set_spawning_popenz,No support for sending fds between processes)�
forkserver)�
popen_fork)�spawn)�util�Popenc                   @   s   e Zd Zdd� Zdd� ZdS )�_DupFdc                 C   s
   || _ d S �N)�ind)�selfr   � r   �8/usr/lib64/python3.9/multiprocessing/popen_forkserver.py�__init__   s    z_DupFd.__init__c                 C   s   t �� | j S r   )r   Zget_inherited_fdsr   )r
   r   r   r   �detach   s    z
_DupFd.detachN)�__name__�
__module__�__qualname__r   r   r   r   r   r   r
      s   r
   c                       sB   e Zd ZdZeZ� fdd�Zdd� Zdd� Ze	j
fdd	�Z�  ZS )
r	   r   c                    s   g | _ t� �|� d S r   )�_fds�superr   )r
   �process_obj��	__class__r   r   r   !   s    zPopen.__init__c                 C   s   | j �|� t| j �d S )Nr   )r   �append�len)r
   �fdr   r   r   �duplicate_for_child%   s    zPopen.duplicate_for_childc                 C   s�   t �|j�}t�� }t| � z$t�||� t�||� W td � n
td � 0 t�	| j
�\| _}t�
|�}t�| tj|| jf�| _t|ddd��}|�|�� � W d   � n1 s�0    Y  t�| j�| _d S )N�wbT)�closefd)r   Zget_preparation_data�_name�io�BytesIOr   r   �dumpr   Zconnect_to_new_processr   �sentinel�os�dupr   �Finalize�	close_fds�	finalizer�open�write�	getbuffer�read_signed�pid)r
   r   Z	prep_data�buf�wZ	_parent_w�fr   r   r   �_launch)   s    
�,z
Popen._launchc              	   C   sp   | j d u rjddlm} |tjkr$dnd }|| jg|�s:d S zt�| j�| _ W n tt	fyh   d| _ Y n0 | j S )Nr   )�wait�   )
�
returncode�multiprocessing.connectionr3   r%   �WNOHANGr$   r   r-   �OSError�EOFError)r
   �flagr3   �timeoutr   r   r   �poll=   s    
z
Popen.poll)
r   r   r   �methodr
   �DupFdr   r   r2   r%   r7   r<