o
    éT•j¶  ã                   @   sŠ   d dl Z d dlZddlmZmZ ejsedƒ‚ddl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_popenz,No support for sending fds between processes)Ú
forkserver)Ú
popen_fork)Úspawn)ÚutilÚPopenc                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú_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 Zd ZdZeZ‡ fdd„Zdd„ Zdd„ Ze	j
f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  |¡ t| j ƒd S )Nr   )r   ÚappendÚlen)r   Úfdr   r   r   Úduplicate_for_child%   s   zPopen.duplicate_for_childc                 C   sÎ   t  |j¡}t ¡ }t| ƒ zt ||¡ t ||¡ W td ƒ ntd ƒ w t 	| j
¡\| _}t |¡}t | tj|| jf¡| _t|ddd��}| | ¡ ¡ W d   ƒ n1 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 r9ddlm} |tjkrdnd }|| jg|ƒsd S zt | j¡| _ W | j S  tt	fy8   d| _ Y | j S w | j S )Nr   )Úwaitéÿ   )
Ú
returncodeÚmultiprocessing.connectionr8   r(   ÚWNOHANGr'   r   r0   ÚOSErrorÚEOFError)r   Úflagr8   Útimeoutr   r   r   Úpoll=   s   
ûûz
Popen.poll)r   r   r   Úmethodr
   ÚDupFdr   r   r7   r(   r<   rA   Ú__classcell__r   r   r   r   r	      s    )r#   r(   Úcontextr   r   ÚHAVE_SEND_HANDLEÚImportErrorÚ r   r   r   r   Ú__all__Úobjectr
   r	   r   r   r   r   Ú<module>   s    
