o
    éT•jí  ã                   @   sp   d dl Z d dlZddlmZmZ ddlmZ ddlmZ ddlmZ dgZ	G dd	„ d	e
ƒZG d
d„ dejƒZdS )é    Né   )Ú	reductionÚset_spawning_popen)Ú
popen_fork)Úspawn)ÚutilÚPopenc                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú_DupFdc                 C   s
   || _ d S ©N©Úfd©Úselfr   © r   ú8/usr/lib/python3.10/multiprocessing/popen_spawn_posix.pyÚ__init__   s   
z_DupFd.__init__c                 C   s   | j S r
   r   )r   r   r   r   Údetach   s   z_DupFd.detachN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r	      s    r	   c                       s4   e Zd ZdZeZ‡ fdd„Zdd„ Zdd„ Z‡  Z	S )r   r   c                    s   g | _ tƒ  |¡ d S r
   )Ú_fdsÚsuperr   )r   Úprocess_obj©Ú	__class__r   r   r      s   zPopen.__init__c                 C   s   | j  |¡ |S r
   )r   Úappendr   r   r   r   Úduplicate_for_child"   s   zPopen.duplicate_for_childc                 C   sÀ  ddl m} | ¡ }| j |¡ t |j¡}t 	¡ }t
| ƒ zt ||¡ t ||¡ W t
d ƒ nt
d ƒ w d  } } }}	zut ¡ \}}t ¡ \}}	tj||d�}
| j ||g¡ t t ¡ |
| j¡| _|| _t|	ddd��}| | ¡ ¡ W d   ƒ n1 s�w   Y  W g }||	fD ]}|d ur˜| |¡ q�t | tj|¡| _||fD ]}|d ur±t |¡ q¦d S g }||	fD ]}|d urÅ| |¡ qºt | tj|¡| _||fD ]}|d urÞt |¡ qÓw )Nr   )Úresource_tracker)Ú
tracker_fdÚpipe_handleÚwbF)Úclosefd)Ú r   Úgetfdr   r   r   Úget_preparation_dataÚ_nameÚioÚBytesIOr   r   ÚdumpÚosÚpipeÚget_command_lineÚextendr   Úspawnv_passfdsÚget_executableÚpidÚsentinelÚopenÚwriteÚ	getbufferÚFinalizeÚ	close_fdsÚ	finalizerÚclose)r   r   r   r   Ú	prep_dataÚfpÚparent_rÚchild_wÚchild_rÚparent_wÚcmdÚfÚfds_to_closer   r   r   r   Ú_launch&   s`   ÿ
ÿÿ€
€
€þú
€
€þzPopen._launch)
r   r   r   Úmethodr	   ÚDupFdr   r   rA   Ú__classcell__r   r   r   r   r      s    )r&   r)   Úcontextr   r   r"   r   r   r   Ú__all__Úobjectr	   r   r   r   r   r   Ú<module>   s    
