£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
U
    e5d0                     @   s   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 d	d
ddgZdZedZG dd deZdddZdd Zdd Zd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                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )
ForkServerc                 C   s.   d | _ d | _d | _d | _t | _dg| _d S )N__main__)_forkserver_address_forkserver_alive_fd_forkserver_pid_inherited_fds	threadingZLock_lock_preload_modulesself r   2/usr/lib64/python3.8/multiprocessing/forkserver.py__init__"   s    
zForkServer.__init__c              	   C   s   | j  |   W 5 Q R X d S N)r   _stop_unlockedr   r   r   r   _stop*   s    zForkServer._stopc                 C   sV   | j d krd S t| j d | _t| j d d | _ t| jsLt| j d | _d S )Nr   )	r   oscloser   waitpidr   is_abstract_socket_namespacer   unlinkr   r   r   r   r   /   s    
zForkServer._stop_unlockedc                 C   s&   t dd | jD std|| _d S )Nc                 s   s   | ]}t |tkV  qd S r   )typestr).0modr   r   r   	<genexpr>@   s     z4ForkServer.set_forkserver_preload.<locals>.<genexpr>z&module_names must be a list of strings)allr   	TypeError)r   Zmodules_namesr   r   r   r   >   s    z!ForkServer.set_forkserver_preloadc                 C   s   | j S r   )r   r   r   r   r   r
   D   s    zForkServer.get_inherited_fdsc              
   C   s   |    t|d tkr tdttj}|| j t	 \}}t	 \}}||| j
t g}||7 }zNz&t|| ||fW W 4W  5 Q R  S    t| t|  Y nX W 5 t| t| X W 5 Q R X d S )N   ztoo many fds)r	   lenMAXFDS_TO_SEND
ValueErrorsocketAF_UNIXZconnectr   r    piper   r   Zgetfdr!   r   Zsendfds)r   fdsZclientZparent_rchild_wchild_rZparent_wZallfdsr   r   r   r   L   s(    


z!ForkServer.connect_to_new_processc                    s  | j ~ t  | jd k	r`t| jtj\}}|sBW 5 Q R  d S t| j d | _	d | _d | _d}| j
rddh td} fdd| D }ni }ttj}td}|| t|st|d |  t \}}ztzV| |g}	|| || j
|f; }t }
|
gt  }|d	|g7 }t|
||	}W n   t|  Y nX W 5 t| X || _	|| _|| _W 5 Q R X W 5 Q R X d S )
NzCfrom multiprocessing.forkserver import main; main(%d, %d, %r, **%r)	main_pathsys_pathignorec                    s   i | ]\}}| kr||qS r   r   )r'   xyZdesired_keysr   r   
<dictcomp>   s       z-ForkServer.ensure_running.<locals>.<dictcomp>r1   i  z-c)r   r   r	   r   r    r"   WNOHANGr!   r   r   r   r   Zget_preparation_dataitemsr0   r1   r   Zarbitrary_addressZbindr   r#   chmodZlistenr2   filenoZget_executableZ_args_from_interpreter_flagsZspawnv_passfds)r   pidZstatuscmddatalistenerZaddressalive_rZalive_wZfds_to_passZexeargsr   r;   r   r	   i   sN    






zForkServer.ensure_runningN)
__name__
__module____qualname__r   r   r   r   r
   r   r	   r   r   r   r   r       s   r   c                 C   s  |rdd|kr8|d k	r8dt  _zt| W 5 t  `X |D ]&}zt| W q< tk
r`   Y q<X q<t  t	
 \}}t	|d t	|d dd }tj|tjtji}	dd |	 D }
t| i }tjtj| d}t }| t_||tj ||tj ||tj znd	d
 | D }|r"qBq"||krPt||krBt	|d zt	dt	j\}}W n t k
r   Y qBY nX |dkrqB|!|d }|d k	r0t	"|rt	#| }n&t	$|st%d&||t	'|}zt(|| W n t)k
r"   Y nX t	*| nt+,d|  qf||kr|- d ,}t./|t0d }t1|t0krt2d&t1||^}}}|*  t	3 }|dkr4d}zpz<|*  |*  ||||g}|5|6  t7||||
}W n. t8k
r    t9j:t9;   t9j<=  Y nX W 5 t	4| X nNzt(|| W n t)k
rX   Y nX |||< t	*| |D ]}t	*| qpW 5 Q R X W n4 t>k
r } z|j?t?j@kr W 5 d }~X Y nX qW 5 Q R X W 5 Q R X d S )Nr   TFc                  W   s   d S r   r   )Z_unusedr   r   r   sigchld_handler   s    zmain.<locals>.sigchld_handlerc                 S   s   i | ]\}}|t  ||qS r   )signal)r'   sigvalr   r   r   r<      s    zmain.<locals>.<dictcomp>)r@   c                 S   s   g | ]\}}|j qS r   )Zfileobj)r'   keyZeventsr   r   r   
<listcomp>   s     zmain.<locals>.<listcomp>i   r   zChild {0:n} status is {1:n}z.forkserver: waitpid returned unexpected pid %dr   zToo many ({0:n}) fds to send)Ar   Zcurrent_processZ_inheritingr   Zimport_main_path
__import__ImportErrorr   Z_close_stdinr    r2   set_blockingrK   SIGCHLDSIGINTSIG_IGNr>   set_wakeup_fdr0   r1   	selectorsZDefaultSelectorZgetsockname_forkserverr   registerZ
EVENT_READZselect
SystemExitreadr"   r=   ChildProcessErrorpopWIFSIGNALEDWTERMSIG	WIFEXITEDAssertionErrorformatWEXITSTATUSwrite_signedBrokenPipeErrorr!   warningswarnZacceptr   Zrecvfdsr.   r-   RuntimeErrorfork_exitextendvalues
_serve_one	Exceptionsys
excepthookexc_infostderrflushOSErrorerrnoZECONNABORTED)Zlistener_fdrE   Zpreloadr6   r7   modnameZsig_rZsig_wrJ   handlersZold_handlersZ	pid_to_fdrD   ZselectorZrfdsrA   stsr4   
returncodesr3   r5   code
unused_fdsfder   r   r   main   s    

  





 





r   c           	      C   sh   t d | D ]\}}t  || q|D ]}t| q,|^t_tj_	t_
t| }t| |}|S )NrP   )rK   rW   r>   r    r!   rY   r   r   Z_resource_trackerZ_fdr   dupr   Z_main)	r5   r3   r}   rx   rL   rM   r~   Zparent_sentinelr|   r   r   r   rn   1  s    

rn   c                 C   sN   d}t j}t||k r@t| |t| }|s6td||7 }q
t |d S )N    zunexpected EOFr   )SIGNED_STRUCTsizer-   r    r\   EOFErrorZunpack)r~   rC   Zlengthr{   r   r   r   read_signedH  s    
r   c                 C   s<   t |}|r8t| |}|dkr*td||d  }q
d S )Nr   zshould not get here)r   Zpackr    writeri   )r~   nmsgnbytesr   r   r   re   R  s    
re   )NN) rv   r    rX   rK   r0   Zstructrp   r   rg    r   r   contextr   r   r   r   __all__r.   ZStructr   objectr   r   rn   r   re   rY   r	   r
   r   r   r   r   r   r   <module>   s>   
 
 
