§
    (¶Õin/  ã                   ó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    ú1/usr/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ÝŒI�dÔ.Ñ/Ô/Ð/Ø#'ˆÔ Ð Ð r    c                 ón   — t          d„ | j        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-   è è € ÐEÐE¨•4˜‘9”9¥Ð#ÐEÐEÐEÐEÐEÐEr    z&module_names must be a list of stringsN)Úallr   Ú	TypeError)r   Úmodules_namess     r   r   z!ForkServer.set_forkserver_preload>   sB   € åÐEÐE¨tÔ/DÐEÑEÔEÑEÔEð 	FÝÐDÑEÔ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                 óö  — |                       ¦   «          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œ  € ð 	×ÒÑÔÐÝˆs‰8Œ8�a‰<�>Ò)Ð)Ý˜^Ñ,Ô,Ð,ÝŒ]�6œ>Ñ*Ô*ð 	"¨fØ�NŠN˜4Ô3Ñ4Ô4Ð4Ý "¤¡	¤	ÑˆH�gÝ "¤¡	¤	ÑˆG�XØ˜w¨Ô(AÝ&Ô,Ñ.Ô.ð0ˆFà�c‰MˆFð	"ÝÔ! &¨&Ñ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 )
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Úignorec                 ó$   •— i | ]\  }}|‰v ¯	||“ŒS © rM   )r/   ÚxÚyÚdesired_keyss      €r   ú
<dictcomp>z-ForkServer.ensure_running.<locals>.<dictcomp>„   s)   ø€ ÐKÐKÐK¡  A¸¸lÐ9JÐ9J˜˜1Ð9JÐ9JÐ9Jr    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¨Ô)=½r¼zÑ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œ~Ñ.Ô.ð +°(Ý$Ô6°yÑAÔA�Ø—’˜gÑ&Ô&Ð&ÝÔ8¸ÑAÔAð -Ý”H˜W eÑ,Ô,Ð,Ø—’Ñ!Ô!Ð!õ $&¤7¡9¤9Ñ �˜ð&Ø#+§?¢?Ñ#4Ô#4°gÐ">�KØ˜HŸOšOÑ-Ô-¨w¸Ô8MØ ð"ñ "�CåÔ.Ñ0Ô0�CØ˜5¥4Ô#DÑ#FÔ#FÑF�DØ˜T 3˜KÑ'�DÝÔ-¨c°4¸ÑEÔE�C�CøðÝ”H˜WÑ%Ô%Ð%Øøøøð õ
 ”H˜WÑ%Ô%Ð%Ð%ø•B”H˜WÑ%Ô%Ð%Ð%øøøØ+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           
      óÎ
  — |r„d|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 rÌt          j        |d¦  «         	 	 t          j        dt          j        ¦  «        \  }}n# t@          $ r Y n†w 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    ræd	}	 | %                    ¦   «          | %                    ¦   «          ||||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ð �œ s¨CÑ0Ô0ð 8ð 8ð 8r    )rY   c                 ó"   — g | ]\  }}|j         ‘ŒS rM   )Úfileobj)r/   ÚkeyÚeventss      r   ú
<listcomp>zmain.<locals>.<listcomp>Ú   s   € ÐOÐOÐO©M¨S°&˜CœKÐ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Ð%:Ø48�GÔ#Ñ%Ô%Ô1ð:ÝÔ& yÑ1Ô1Ð1åÔ+Ñ-Ô-Ð9Ð9ø•GÔ+Ñ-Ô-Ð9Ð9Ð9Ð9Ð9Øð 	ð 	ˆGðÝ˜7Ñ#Ô#Ð#Ð#øÝð ð ð Ø�ðøøøõ 	ÔÑÔÐå”7‘9”9�L€Eˆ5Ý„O�E˜5Ñ!Ô!Ð!Ý„O�E˜5Ñ!Ô!Ð!ðð ð õ 	Œ˜åŒ•v”~ð	
€Hð8ð 8Ø&.§n¢nÑ&6Ô&6ð8ñ 8ô 8€Lõ Ô˜ÑÔÐð €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ÐO¸X¿_º_Ñ=NÔ=NÐOÑOÔO�DØð Øðð
 ˜d�?�?åœ7 7¨AÑ.Ô.°#Ò5Ð5Ð5°}Ñ5Ô5Ð5Ý$Ð$à˜D�=�=å”G˜E 5Ñ)Ô)Ð)ðEð"Ý')¤z°"µb´jÑ'AÔ'A™H˜C  øÝ0ð "ð "ð "Ø!˜Eð"øøøà !š8˜8Ø!Ø"+§-¢-°°TÑ":Ô":˜Ø"Ð.Ý)+Ô)BÀ3Ñ)GÔ)G˜Jð%Ý ,¨W°jÑ AÔ AÐ AÐ AøÝ#2ð %ð %ð %à $ ð%øøøõ œH WÑ-Ô-Ð-Ð-õ %œMð +>Ø@Cñ+Dñ Eô Eð Eð+Eð0 ˜tÐ#Ñ#à!ŸšÑ*Ô*¨1Ô-ð $-°å'Ô/°µ>ÀAÑ3EÑFÔF˜Ý˜s™8œ8¥nÒ4Ð4Ý".Ø >× EÒ EÝ$'¨¡H¤Hñ!.ô !.ñ#/ô #/ð /ð 25Ð.˜ ¨3ØŸš™	œ	˜	Ý œg™iœi˜Ø !š8˜8à#$˜Dð/Ø (§¢Ñ 0Ô 0Ð 0Ø (§¢Ñ 0Ô 0Ð 0Ø.5°wÀÀuÐ-M 
Ø *× 1Ò 1°)×2BÒ2BÑ2DÔ2DÑ EÔ EÐ EÝ'1°'¸3Ø2<Ø2>ñ(@ô (@  øõ $-ð 3ð 3ð 3Ý #¤µ´±´Ð ?Ð ?Ý #¤
× 0Ò 0Ñ 2Ô 2Ð 2Ð 2Ð 2ð3øøøõ !#¤¨¡¤  ø¥¤¨¡¤  øøøð%Ý ,¨W°cÑ :Ô :Ð :Ð :øÝ#2ð %ð %ð %à $ ð%øøøð .5˜I c™NÝœH WÑ-Ô-Ð-Ø&)ð -ð - Ý "¤¨¡¤  ðI$-ð $-ð $-ñ $-ô $-ð $-ð $-ð $-ð $-ð $-ð $-øøøð $-ð $-ð $-ð $-øøõL ð ð ð Ø”7�eÔ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¦   € å
Ô˜ÑÔÐØ—N’NÑ$Ô$ð  ð  ‰ˆˆSÝŒ�c˜3ÑÔÐÐØð ð ˆÝ
Œ�‰Œˆˆð %(ð"…[Ô%ÝÔ'Ô+ÝÔ õ ”f˜W‘o”o€OÝŒ;�w Ñ0Ô0€Dà€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Ò
Ð
ÝŒG�B˜¥ 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ð ð ð.)ð )ð )ðð ð ð ˆj‰lŒl€ØÔ+€ØÔ1Ð Ø$Ô;Ð Ø$Ô;Ð Ð Ð r    