
    Rh                         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e      Z G d d	e	j                        Zy)    N   )	reductionset_spawning_popenz,No support for sending fds between processes)
forkserver)
popen_fork)spawn)utilPopenc                       e Zd Zd Zd Zy)_DupFdc                     || _         y N)ind)selfr   s     7/usr/lib/python3.12/multiprocessing/popen_forkserver.py__init__z_DupFd.__init__   s	        c                 D    t        j                         | j                     S r   )r   get_inherited_fdsr   )r   s    r   detachz_DupFd.detach   s    ++-dhh77r   N)__name__
__module____qualname__r   r    r   r   r   r      s    8r   r   c                   P     e Zd ZdZeZ fdZd Zd Ze	j                  fdZ xZS )r
   r   c                 2    g | _         t        | 	  |       y r   )_fdssuperr   )r   process_obj	__class__s     r   r   zPopen.__init__!   s    	%r   c                 h    | j                   j                  |       t        | j                         dz
  S )Nr   )r   appendlen)r   fds     r   duplicate_for_childzPopen.duplicate_for_child%   s'    		499~!!r   c                    t        j                  |j                        }t        j                         }t        |        	 t        j                  ||       t        j                  ||       t        d        t        j                  | j                        \  | _        }t        j                  |      }t        j                  | t        j                   || j                  f      | _        t%        |dd      5 }|j'                  |j)                                d d d        t        j*                  | j                        | _        y # t        d        w xY w# 1 sw Y   >xY w)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fs          r   _launchzPopen._launch)   s    ..{/@/@A	jjl4 	%NN9c*NN;,t$%<<TYYGq FF1I	tT^^(14=='AC!T4( 	%AGGCMMO$	%))$--8 t$	% 	%s    ,E 7 EEEc                 F   | j                   cddlm} |t        j                  k(  rdnd } || j
                  g|      sy 	 t        j                  | j
                        | _         | j                   S | j                   S # t        t        f$ r d| _         Y | j                   S w xY w)Nr   )wait   )

returncodemultiprocessing.connectionrA   r0   WNOHANGr/   r   r8   OSErrorEOFError)r   flagrA   timeouts       r   pollz
Popen.poll=   s    ??"72::-a4G1&","8"8"G t X& & #&&s    $A< <B B )r   r   r   methodr   DupFdr   r%   r?   r0   rE   rJ   __classcell__)r    s   @r   r
   r
      s*    FE&"9( 

 r   )r+   r0   contextr   r   HAVE_SEND_HANDLEImportError r   r   r   r	   __all__objectr   r
   r   r   r   <module>rT      sV    	 	 2!!
D
EE     )8V 8-J -r   