File: //lib/python3.10/multiprocessing/__pycache__/popen_forkserver.cpython-310.pyc
o
    E�h�  �                   @   s�   d dl Z d dlZddlmZmZ ejsed��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   �7/usr/lib/python3.10/multiprocessing/popen_forkserver.py�__init__   s   
z_DupFd.__init__c                 C   s   t �� | j S r   )r   �get_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| � zt�||� t�||� W td � ntd � w t�	| j
�\| _}t�
|�}t�| tj|| jf�| _t|ddd��}|�|�� � W d   � n1 sYw   Y  t�| j�| _d S )N�wbT)�closefd)r   �get_preparation_data�_name�io�BytesIOr   r   �dumpr   �connect_to_new_processr   �sentinel�os�dupr   �Finalize�	close_fds�	finalizer�open�write�	getbuffer�read_signed�pid)r
   r   �	prep_data�buf�w�	_parent_w�fr   r   r   �_launch)   s    
��z
Popen._launchc              	   C   sx   | j d u r9ddlm} |tjkrdnd }|| jg|�sd S zt�| j�| _ W | j S  tt	fy8   d| _ Y | j S w | j S )Nr   )�wait�   )
�
returncode�multiprocessing.connectionr8   r(   �WNOHANGr'