
    df/                     D   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZddl	m
Z
 ddl	mZ ddlmZ ddl	mZ ddl	mZ ddl	mZ g d	Zd
Z ej        d          Z G d de          ZddZd Zd Zd Z e            Zej        Zej        Zej        Zej        ZdS )    N   )
connection)process)	reduction)resource_tracker)spawn)util)ensure_runningget_inherited_fdsconnect_to_new_processset_forkserver_preload   qc                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	
ForkServerc                 ~    d | _         d | _        d | _        d | _        t	          j                    | _        dg| _        d S )N__main__)_forkserver_address_forkserver_alive_fd_forkserver_pid_inherited_fds	threadingLock_lock_preload_modulesselfs    ,  /croot/python-split_1694437901252/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_plac/lib/python3.11/multiprocessing/forkserver.py__init__zForkServer.__init__"   sA    #' $(!#"^%%
!+    c                 n    | j         5  |                                  d d d            d S # 1 swxY w Y   d S N)r   _stop_unlockedr   s    r   _stopzForkServer._stop*   s    Z 	" 	"!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s   *..c                    | j         d S t          j        | j                   d | _        t          j        | j         d           d | _         t          j        | j                  st          j        | j                   d | _        d S )Nr   )	r   oscloser   waitpidr	   is_abstract_socket_namespacer   unlinkr   s    r   r#   zForkServer._stop_unlocked/   s    'F 	*+++$(!

4'+++#01IJJ 	0Id.///#'   r    c                 d    t          d |D                       st          d          || _        dS )z>Set list of module names to try to load in forkserver process.c              3   B   K   | ]}t          |          t          u V  d S r"   )typestr).0mods     r   	<genexpr>z4ForkServer.set_forkserver_preload.<locals>.<genexpr>@   s-      ==499#======r    z&module_names must be a list of stringsN)all	TypeErrorr   )r   modules_namess     r   r   z!ForkServer.set_forkserver_preload>   s?    ==}===== 	FDEEE -r    c                     | j         S )zReturn list of fds inherited from parent process.

        This returns None if the current process was not started by fork
        server.
        )r   r   s    r   r   zForkServer.get_inherited_fdsD   s     ""r    c                    |                                   t          |          dz   t          k    rt          d          t	          j        t          j                  5 }|                    | j                   t          j	                    \  }}t          j	                    \  }}||| j
        t          j                    g}||z  }	 t          j        ||           ||ft          j        |           t          j        |           cddd           S #  t          j        |           t          j        |            xY w# t          j        |           t          j        |           w xY w# 1 swxY w Y   dS )a;  Request forkserver to create a child process.

        Returns a pair of fds (status_r, data_w).  The calling process can read
        the child process's pid and (eventually) its returncode from status_r.
        The calling process should write to data_w the pickled preparation and
        process data.
           ztoo many fdsN)r
   lenMAXFDS_TO_SEND
ValueErrorsocketAF_UNIXconnectr   r&   piper   r   getfdr   sendfdsr'   )r   fdsclientparent_rchild_wchild_rparent_wallfdss           r   r   z!ForkServer.connect_to_new_processL   s    	s88a<>))^,,,]6>** 	"fNN43444 "		Hg "		GXw(A&,..0FcMF	"!&&111) !!!!!!!	" 	" 	" 	" 	" 	" 	" 	"""""""!!!!!!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s7   A(E.D(E.+D>>E*E++E..E25E2c                    | j         5  t          j                     | j        et	          j        | j        t          j                  \  }}|s	 ddd           dS t	          j        | j                   d| _	        d| _        d| _        d}| j
        r9ddht          j        d          }fd|                                D             }ni }t          j        t          j                  5 }t!          j        d          }|                    |           t'          j        |          st	          j        |d           |                                 t	          j                    \  }}	 |                                |g}	||                                || j
        |fz  }t          j                    }
|
gt'          j                    z   }|d	|gz  }t'          j        |
||	          }n#  t	          j        |            xY w	 t	          j        |           n# t	          j        |           w xY w|| _	        || _        || _        ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )
zMake sure that a fork server is running.

        This can be called from any process.  Note that usually a child
        process will just reuse the forkserver started by its parent, so
        ensure_running() will do nothing.
        NzCfrom multiprocessing.forkserver import main; main(%d, %d, %r, **%r)	main_pathsys_pathignorec                 $    i | ]\  }}|v 	||S  rM   )r/   xydesired_keyss      r   
<dictcomp>z-ForkServer.ensure_running.<locals>.<dictcomp>   s)    KKKAl9J9J19J9J9Jr    r<   i  z-c)r   r   r
   r   r&   r(   WNOHANGr'   r   r   r   r   get_preparation_dataitemsr;   r<   r   arbitrary_addressbindr	   r)   chmodlistenr>   filenoget_executable_args_from_interpreter_flagsspawnv_passfds)r   pidstatuscmddatalisteneraddressalive_ralive_wfds_to_passexeargsrP   s               @r   r
   zForkServer.ensure_runningi   s    Z 1	+ 1	++---#/ j)=rzJJV 1	+ 1	+ 1	+ 1	+ 1	+ 1	+ 1	+ 1	+ 2333+/(,0)'+$,C $  +Z81(;;KKKKKKKv~.. +($6yAAg&&&8AA -HWe,,,!!! $&799 &#+??#4#4g">KHOO--w8M " "C.00C54#D#F#FFDT3K'D-c4EECCHW%%% 
 HW%%%%BHW%%%%+2(,3)'*$3+ + + + + + + + + + + + + + +11	+ 1	+ 1	+ 1	+ 1	+ 1	+ 1	+ 1	+ 1	+ 1	+ 1	+ 1	+ 1	+ 1	+ 1	+ 1	+ 1	+ 1	+si   AI)BI)+A=I)A=G'&H'G>>HIH--II)I	I)I	I))I-0I-N)
__name__
__module____qualname__r   r$   r#   r   r   r   r
   rM   r    r   r   r       s}        - - -" " "
( ( (. . .# # #" " ":8+ 8+ 8+ 8+ 8+r    r   c           
      
   |rd|v r[|Ydt          j                    _        	 t          j        |           t          j                    `n# t          j                    `w xY w|D ]"}	 t          |           # t          $ r Y w xY wt          j                     t          j
                    \  }}t          j        |d           t          j        |d           d }t          j        |t          j        t          j        i}	d |	                                D             }
t          j        |           i }t%          j        t$          j        |           5 }t)          j                    5 }|                                t.          _        |                    |t(          j                   |                    |t(          j                   |                    |t(          j                   	 	 	 d |                                D             }|rn"||v r*t          j        |d	          d
k    s
J d            t:          ||v rt          j        |d           	 	 t          j        dt          j                  \  }}n# t@          $ r Y nw xY w|dk    rn{|!                    |d          }|Kt          j"        |          }	 tG          ||           n# tH          $ r Y nw xY wt          j%        |           ntM          j'        d|z             ||v r|(                                d         5 }tS          j*        |tV          d	z             }tY          |          tV          k    r/t[          d.                    tY          |                              |^}}}|%                                 t          j/                    }|dk    rd	}	 |%                                 |%                                 ||||g}|0                    |1                                           te          ||||
          }nM# tf          $ r@ ti          j5        ti          j6                      th          j7        8                                 Y nw xY wt          j9        |           nm# t          j9        |           w xY w	 tG          ||           n# tH          $ r Y nw xY w|||<   t          j%        |           |D ]}t          j%        |           ddd           n# 1 swxY w Y   n-# tt          $ r }|j;        tv          j<        k    r Y d}~nd}~ww xY wY# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )zRun forkserver.r   NTFc                      d S r"   rM   )_unuseds    r   sigchld_handlerzmain.<locals>.sigchld_handler   s    r    c                 @    i | ]\  }}|t          j         ||          S rM   )signal)r/   sigvals      r   rQ   zmain.<locals>.<dictcomp>   s:     8 8 8"c sC00 8 8 8r    )rY   c                 "    g | ]\  }}|j         S rM   )fileobj)r/   keyeventss      r   
<listcomp>zmain.<locals>.<listcomp>   s    OOOMS&CKOOOr    r   r    zNot at EOF?i   r   z.forkserver: waitpid returned unexpected pid %dzToo many ({0:n}) fds to send)=r   current_process_inheritingr   import_main_path
__import__ImportErrorr	   _close_stdinr&   r>   set_blockingrp   SIGCHLDSIGINTSIG_IGNrT   set_wakeup_fdr;   r<   	selectorsDefaultSelectorgetsockname_forkserverr   register
EVENT_READselectread
SystemExitr(   rR   ChildProcessErrorpopwaitstatus_to_exitcodewrite_signedBrokenPipeErrorr'   warningswarnacceptr   recvfdsr9   r8   RuntimeErrorformatforkextendvalues
_serve_one	Exceptionsys
excepthookexc_infostderrflush_exitOSErrorerrnoECONNABORTED)listener_fdrc   preloadrI   rJ   modnamesig_rsig_wrn   handlersold_handlers	pid_to_fdra   selectorrfdsr]   stsrD   
returncodesrA   rE   code
unused_fdsfdes                             r   mainr      s      Y%:48G#%%1:&y111+--99G+--99999 	 	G7####    	799LE5OE5!!!OE5!!!   	v~	
H8 8&.nn&6&68 8 8L  I	v~k	:	:	: Yh		"	$	$Y(0*2*>*>*@*@'(I$8999'9#7888%!5666Q	POOX__=N=NOOOD 
 d??77A..#555}555$$D==GE5)))E"')z"bj'A'AHC0 " " "!E"!88!"+--T":":".)+)B3)G)GJ% ,Wj A A A A#2 % % % $% HW---- %M +>@C+D E E E+E0 t##!**1- $-'/>A3EFFs88n44". > E E$'HH!. !.#/ #/ / 25.3			 gii!88#$D/ ( 0 0 0 ( 0 0 0.5wu-M
 * 1 1)2B2B2D2D E E E'1'32<2>(@ (@ $- 3 3 3 # ? ? #
 0 0 2 2 2 2 23 !#% ,Wc : : : :#2 % % % $% .5IcNHW---&) - - "I$- $- $- $- $- $- $- $- $- $- $- $- $- $- $-L    7e000 10000_Q	Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y YsC  A
 
A'A77
BBU)B U*A+T"I98T9
JTJ6T=KT
KTKAT*BTA'P,+R,AQ6	3R5Q6	6R9TR$	$T(R98T9
S	TS	5T;TTTTTU
T=T83U8T==UU	U	U	
UU!Uc                 `   t          j        d           |                                D ]\  }}t          j         ||           |D ]}t          j        |           |^t
          _        t          j        _	        t
          _
        t          j        |           }t          j        | |          }|S )Nrx   )rp   r   rT   r&   r'   r   r   r   _resource_tracker_fdr   dupr   _main)	rE   rA   r   r   rq   rr   r   parent_sentinelr   s	            r   r   r   +  s    
NN$$    Sc3  
 %("[%'+  fWooO;w00DKr    c                     d}t           j        }t          |          |k     rNt          j        | |t          |          z
            }|st          d          ||z  }t          |          |k     Nt                               |          d         S )Nr    zunexpected EOFr   )SIGNED_STRUCTsizer8   r&   r   EOFErrorunpack)r   r`   lengthr   s       r   read_signedr   B  s    DF
d))f

GBT*++ 	-+,,,		 d))f


 %%a((r    c                     t                               |          }|r8t          j        | |          }|dk    rt	          d          ||d          }|6d S d S )Nr   zshould not get here)r   packr&   writer   )r   nmsgnbytess       r   r   r   L  sq    


Q

C
 "c""Q;;4555&''l	      r    )NN) r   r&   r   rp   r;   structr   r   r    r   r   contextr   r   r   r	   __all__r9   Structr   objectr   r   r   r   r   r   r
   r   r   r   rM   r    r   <module>r      s    				        



                                         % % % c""A+ A+ A+ A+ A+ A+ A+ A+NA A A AH  .) ) )   jll+1 $; $;   r    