Ë
    òT•jf/  ã                   ób  — 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j8                  Zej:                  Zej<                  Zej>                  Zy)é    Né   )Ú
connection)Úprocess)Ú	reduction)Úresource_tracker)Úspawn)Úutil)Úensure_runningÚget_inherited_fdsÚconnect_to_new_processÚset_forkserver_preloadé   Úqc                   ó6   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	y)	Ú
ForkServerc                 ó~   — d | _         d | _        d | _        d | _        t	        j
                  «       | _        dg| _        y )NÚ__main__)Ú_forkserver_addressÚ_forkserver_alive_fdÚ_forkserver_pidÚ_inherited_fdsÚ	threadingÚLockÚ_lockÚ_preload_modules©Úselfs    ú1/usr/lib/python3.12/multiprocessing/forkserver.pyÚ__init__zForkServer.__init__"   s:   € Ø#'ˆÔ Ø$(ˆÔ!Ø#ˆÔØ"ˆÔÜ—^‘^Ó%ˆŒ
Ø!+ ˆÕó    c                 óf   — | j                   5  | j                  «        d d d «       y # 1 sw Y   y xY w©N)r   Ú_stop_unlockedr   s    r   Ú_stopzForkServer._stop*   s*   € à�Z‰Zñ 	"Ø×ÑÔ!÷	"÷ 	"ñ 	"ús   �'§0c                 óB  — | j                   €y t        j                  | j                  «       d | _        t        j                  | j                   d«       d | _         t        j                  | j                  «      st        j                  | j                  «       d | _        y )Nr   )	r   ÚosÚcloser   Úwaitpidr	   Úis_abstract_socket_namespacer   Úunlinkr   s    r   r#   zForkServer._stop_unlocked/   sw   € Ø×ÑÐ'Øô 	�‰�×*Ñ*Ô+Ø$(ˆÔ!ä
�
‰
�4×'Ñ'¨Ô+Ø#ˆÔä×0Ñ0°×1IÑ1IÔJÜ�I‰I�d×.Ñ.Ô/Ø#'ˆÕ r    c                 óL   — t        d„ |D «       «      st        d«      ‚|| _        y)z>Set list of module names to try to load in forkserver process.c              3   ó>   K  — | ]  }t        |«      t        u –— Œ y ­wr"   )ÚtypeÚstr)Ú.0Úmods     r   ú	<genexpr>z4ForkServer.set_forkserver_preload.<locals>.<genexpr>@   s   è ø€ Ò=¨”4˜“9¤Ô#Ñ=ùs   ‚z&module_names must be a list of stringsN)ÚallÚ	TypeErrorr   )r   Úmodules_namess     r   r   z!ForkServer.set_forkserver_preload>   s$   € äÑ=¨}Ô=Ô=ÜÐDÓEÐEØ -ˆÕr    c                 ó   — | j                   S )z”Return 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                 óü  — | j                  «        t        |«      dz   t        k\  rt        d«      ‚t	        j                  t        j
                  «      5 }|j                  | 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 Y   yxY w)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$  € ð 	×ÑÔÜˆs‹8�a‰<œ>Ò)Ü˜^Ó,Ð,Ü�]‰]œ6Ÿ>™>Ó*ð 	"¨fØ�N‰N˜4×3Ñ3Ô4Ü "§¡£	ÑˆH�gÜ "§¡£	ÑˆG�XØ˜w¨×(AÑ(AÜ&×,Ñ,Ó.ð0ˆFà�c‰MˆFð	"Ü×!Ñ! &¨&Ô1Ø Ð)ô —‘˜Ô!Ü—‘˜Ô!÷!	"ñ 	"øðÜ—‘˜Ô"Ü—‘˜Ô"Øûä—‘˜Ô!Ü—‘˜Õ!ú÷!	"ð 	"ús1   ÁA1E2ÃDÃ*E2Ä-E Å EÅ,E/Å/E2Å2E;c                 ó4  — | j                   5  t        j                  «        | j                  �qt	        j
                  | j                  t        j                  «      \  }}|s
	 ddd«       yt	        j                  | j                  «       d| _	        d| _        d| _        d}| j                  rBddh}t        j                  d«      }|j                  «       D ��ci c]  \  }}||v sŒ||“Œ }}}ni }t        j                  t        j                  «      5 }t!        j"                  d«      }	|j%                  |	«       t'        j(                  |	«      st	        j*                  |	d«       |j-                  «        t	        j.                  «       \  }
}	 |j1                  «       |
g}||j1                  «       |
| j                  |fz  }t        j2                  «       }|gt'        j4                  «       z   }|d|gz  }t'        j6                  |||«      }	 t	        j                  |
«       |	| _	        || _        || _        ddd«       ddd«       yc c}}w #  t	        j                  |«       ‚ xY w# t	        j                  |
«       w xY w# 1 sw Y   ŒMxY w# 1 sw Y   yxY w)	zíMake 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Úignorer<   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Údesired_keysÚdataÚxÚyÚlistenerÚaddressÚalive_rÚalive_wÚfds_to_passÚexeÚargss                  r   r
   zForkServer.ensure_runningi   s:  € ð �Z‰Zñ 1	+Ü×+Ñ+Ô-Ø×#Ñ#Ð/ä Ÿj™j¨×)=Ñ)=¼r¿z¹zÓJ‘��VÙà÷1	+ð 1	+ô —‘˜×2Ñ2Ô3Ø+/�Ô(Ø,0�Ô)Ø'+�Ô$ð,ˆCð ×$Ò$Ø +¨ZÐ8�Ü×1Ñ1°(Ó;�Ø)-¯©«×K¡  A¸¸lÒ9J˜˜1™ÐK�ÒKà�ä—‘œvŸ~™~Ó.ð +°(Ü$×6Ñ6°yÓA�Ø—‘˜gÔ&Ü×8Ñ8¸ÔAÜ—H‘H˜W eÔ,Ø—‘Ô!ô $&§7¡7£9Ñ �˜ð&Ø#+§?¡?Ó#4°gÐ">�KØ˜HŸO™OÓ-¨w¸×8MÑ8MØ ð"ñ "�Cä×.Ñ.Ó0�CØ˜5¤4×#DÑ#DÓ#FÑF�DØ˜T 3˜KÑ'�DÜ×-Ñ-¨c°4¸ÓE‘Cô
 —H‘H˜WÔ%Ø+2�Ô(Ø,3�Ô)Ø'*�Ô$÷3+÷11	+ð 1	+ùó( Løð,Ü—H‘H˜WÔ%Øûä—H‘H˜WÕ%ú÷-+ð +ú÷11	+ð 1	+úsi   �AJÁ+A.JÃIÃ&IÃ+)JÄA9JÆA=IÈ*JÈ6JÉJÉI%É%I(É(I?É?JÊJ	ÊJÊJN)
Ú__name__Ú
__module__Ú__qualname__r   r$   r#   r   r   r   r
   © r    r   r   r       s%   „ ò-ò"ò
(ò.ò#ò"ó:8+r    r   c           
      óö
  — |r\d|v rE|�Cdt        j                  «       _        	 t        j                  |«       t        j                  «       `|D ]  }	 t        |«       Œ t        j                  «        t        j                  «       \  }}t        j                  |d«       t        j                  |d«       d„ }t        j                  |t        j                  t        j                  i}	|	j!                  «       D �
�ci c]  \  }
}|
t        j                  |
|«      “Œ }}
}t        j"                  |«       i }t%        j$                  t$        j&                  | ¬«      5 }t)        j*                  «       5 }|j-                  «       t.        _        |j3                  |t(        j4                  «       |j3                  |t(        j4                  «       |j3                  |t(        j4                  «       	 	 	 |j7                  «       D ��cg c]  \  }}|j8                  ‘Œ }}}|rnŒ0||v r&t        j:                  |d«      dk(  sJ d	«       ‚t<        ‚||v rªt        j:                  |d
«       	 	 t        j>                  dt        j@                  «      \  }}|dk(  rne|jE                  |d«      }|�8t        jF                  |«      }	 tI        ||«       t        jL                  |«       ntO        jP                  d|z  «       Œ“||v �rK|jS                  «       d   5 }tU        jV                  |tX        dz   «      }t[        |«      tX        kD  r#t]        dj_                  t[        |«      «      «      ‚|^}}}|jM                  «        t        j`                  «       }|dk(  rld}	 |jM                  «        |jM                  «        ||||g}|jc                  |je                  «       «       tg        ||||«      }t        jt                  |«       nC	 tI        ||«       |||<   t        jL                  |«       |D ]  }t        jL                  |«       Œ ddd«       �Œ\# t        j                  «       `w xY w# t        $ r Y �Œw xY wc c}}
w c c}}w # tB        $ r Y �Œ“w xY w# tJ        $ r Y �ŒÒw xY w# th        $ rF tk        jl                  tk        jn                  «       Ž  tj        jp                  js                  «        Y �Œw xY w# t        jt                  |«       w xY w# tJ        $ r Y �Œw xY w# 1 sw Y   ŒÜxY w# tv        $ r)}|jx                  tx        jz                  k7  r‚ Y d}~�Œd}~ww xY w# 1 sw Y   nxY wddd«       y# 1 sw Y   yxY w)zRun forkserver.r   NTFc                   ó   — y r"   rh   )Ú_unuseds    r   Úsigchld_handlerzmain.<locals>.sigchld_handler¼   s   € àr    )rS   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_blockingÚsignalÚSIGCHLDÚSIGINTÚSIG_IGNrN   Úset_wakeup_fdr;   r<   Ú	selectorsÚDefaultSelectorÚgetsocknameÚ_forkserverr   ÚregisterÚ
EVENT_READÚselectÚfileobjÚreadÚ
SystemExitr(   rL   Ú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_fdr`   ÚpreloadrI   rJ   ÚmodnameÚsig_rÚsig_wrl   ÚhandlersÚsigÚvalÚold_handlersÚ	pid_to_fdr^   ÚselectorÚkeyÚeventsÚrfdsrW   ÚstsrD   Ú
returncodeÚsrA   rE   ÚcodeÚ
unused_fdsÚfdÚes                                 r   Úmainr²   §   sà  € áØ˜Ñ  YÐ%:Ø48ŒG×#Ñ#Ó%Ô1ð:Ü×&Ñ& yÔ1ä×+Ñ+Ó-Ð9Øò 	ˆGðÜ˜7Õ#ð	ô 	×ÑÔä—7‘7“9�L€Eˆ5Ü‡O�O�E˜5Ô!Ü‡O�O�E˜5Ô!òô 	�‰˜ä�‰”v—~‘~ð	
€Hð '/§n¡nÓ&6÷8Ù"˜˜cð œŸ™ s¨CÓ0Ñ0ð 8€Lñ 8ô ×Ñ˜Ôð €Iä	�‰”v—~‘~¨kÔ	:ð Y¸hÜ	×	"Ñ	"Ó	$ðYØ(0Ø*2×*>Ñ*>Ó*@ŒÔ'à×Ñ˜(¤I×$8Ñ$8Ô9Ø×Ñ˜'¤9×#7Ñ#7Ô8Ø×Ñ˜%¤×!5Ñ!5Ô6àðPØØ=E¿_¹_Ó=N×O©M¨S°&˜CŸK›KÐO�DÑOÙØð ð
 ˜d‘?äŸ7™7 7¨AÓ.°#Ò5ÐD°}ÓDÐ5Ü$Ð$à˜D‘=ä—G‘G˜E 5Ô)Øð"Ü')§z¡z°"´b·j±jÓ'A™H˜C ð  !š8Ø!Ø"+§-¡-°°TÓ":˜Ø"Ð.Ü)+×)BÑ)BÀ3Ó)G˜Jð%Ü ,¨W°jÔ Aô ŸH™H WÕ-ô %ŸM™Mð +>Ø@Cñ+Dô Eð+ ð0 ˜tÒ#à!Ÿ™Ó*¨1Ñ-ð $-°ä'×/Ñ/°´>ÀAÑ3EÓF˜Ü˜s›8¤nÒ4Ü".Ø >× EÑ EÜ$'¨£Hó!.ó#/ð /ð 25Ð.˜ ¨3ØŸ™œ	Ü Ÿg™g›i˜Ø !š8à#$˜Dð/Ø (§¡Ô 0Ø (§¡Ô 0Ø.5°wÀÀuÐ-M 
Ø *× 1Ñ 1°)×2BÑ2BÓ2DÔ EÜ'1°'¸3Ø2<Ø2>ó(@ ô !#§¡¨¥ð%Ü ,¨W°cÔ :ð .5˜I c™NÜŸH™H WÔ-Ø&)ò - Ü "§¡¨¥ð-÷G$-ñS øôQ ×+Ñ+Ó-Ñ9ûô ò Úðüó&8ùó( Pøô   1ò "Ú!ð"ûô $3ò %â $ð%ûô@ $-ò 3Ü #§¡´·±³Ñ ?Ü #§
¡
× 0Ñ 0× 2ð3ûô !#§¡¨¥ûô
 $3ò %â $ð%ú÷=$-ð $-ûôL ò Ø—7‘7œe×0Ñ0Ò0Øõ 1ûðú÷oYð Yú÷ Y÷ Yñ Yús7  £Q ÁQ!Ã<!Q1ÅU/Å1A;UÇ-T%ÈQ7
ÈAT%É$'Q=Ê/T%Ê;RËAT%ÌBTÎARÏ%TÏ<T	Ð6TÐ>T%ÑUÑQÑ!	Q.Ñ-Q.Ñ7T%Ñ=	R
ÒT%Ò	R
Ò
T%Ò	RÒT%ÒRÒT%ÒAS,	Ó(S/Ó+S,	Ó,S/Ó/T	ÔTÔ		T	ÔTÔT	ÔTÔT"ÔT%Ô%	UÔ.UÕUÕUÕUÕU#	ÕU/Õ/U8c                 ón  — t        j                  d«       |j                  «       D ]  \  }}t        j                   ||«       Œ |D ]  }t        j                  |«       Œ |^t
        _        t        j                  _	        t
        _
        t        j                  | «      }t        j                  | |«      }|S )Nrm   )ru   ry   rN   r&   r'   r}   r   r   Ú_resource_trackerÚ_fdr   Údupr   Ú_main)	rE   rA   r¯   r¢   r£   r¤   r°   Úparent_sentinelr®   s	            r   r’   r’   +  s—   € ä
×Ñ˜ÔØ—N‘NÓ$ò  ‰ˆˆSÜ�‰�c˜3Õð àò ˆÜ
�‰��ðð
 %(ð"„[Ô%Ü×'Ñ'Ô+ÜÔ ô —f‘f˜W“o€OÜ�;‰;�w Ó0€Dà€Kr    c                 óø   — d}t         j                  }t        |«      |k  rCt        j                  | |t        |«      z
  «      }|st        d«      ‚||z  }t        |«      |k  rŒCt         j                  |«      d   S )Nr    zunexpected EOFr   )ÚSIGNED_STRUCTÚsizer8   r&   r‚   ÚEOFErrorÚunpack)r°   r[   Úlengthr­   s       r   Úread_signedr¿   B  su   € Ø€DÜ×Ñ€FÜ
ˆd‹)�fÒ
Ü�G‰G�B˜¤ T£Ñ*Ó+ˆÙÜÐ+Ó,Ð,Ø�‰	ˆô	 ˆd‹)�fÓ
ô
 ×Ñ Ó% aÑ(Ð(r    c                 ó�   — t         j                  |«      }|r/t        j                  | |«      }|dk(  rt	        d«      ‚||d  }|rŒ.y y )Nr   zshould not get here)rº   Úpackr&   Úwriter�   )r°   ÚnÚmsgÚnbytess       r   r‡   r‡   L  sH   € Ü
×
Ñ
˜QÓ
€CÙ
Ü—‘˜"˜cÓ"ˆØ�QŠ;ÜÐ4Ó5Ð5Ø�&�'ˆlˆô	 r    )NN) r›   r&   rz   ru   r;   Ústructr”   r   r‰   Ú r   r   Úcontextr   r   r   r	   Ú__all__r9   ÚStructrº   Úobjectr   r²   r’   r¿   r‡   r}   r
   r   r   r   rh   r    r   ú<module>rÌ      s­   ðÛ Û 	Û Û Û Û Û 
Û Û å Ý Ý Ý Ý Ý ò%€ð €Ø�—‘˜cÓ"€ôA+�ô A+óNAòHò.)òñ ‹l€Ø×+Ñ+€Ø×1Ñ1Ð Ø$×;Ñ;Ð Ø$×;Ñ;Ñ r    