o ?Ogn/ã@súddlZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z ddl m Z ddl mZddl mZddl mZgd ¢Zd Ze d ¡ZGd d „d eƒZddd„Zdd„Zdd„Zdd„ZeƒZejZejZejZejZdS)éNé)Ú connection)Úprocess)Ú reduction)Úresource_tracker)Úspawn)Úutil)Úensure_runningÚget_inherited_fdsÚconnect_to_new_processÚset_forkserver_preloadéÚqc@sDeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dS)Ú ForkServercCs.d|_d|_d|_d|_t ¡|_dg|_dS)NÚ__main__)Ú_forkserver_addressÚ_forkserver_alive_fdÚ_forkserver_pidÚ_inherited_fdsÚ threadingZLockÚ_lockÚ_preload_modules©Úself©rúA/opt/alt/python310/lib64/python3.10/multiprocessing/forkserver.pyÚ__init__"s   zForkServer.__init__cCs4|j | ¡WdƒdS1swYdS©N)rÚ_stop_unlockedrrrrÚ_stop*s "ÿzForkServer._stopcCsV|jdurdSt |j¡d|_t |jd¡d|_t |j¡s&t |j¡d|_dS)Nr) rÚosÚcloserÚwaitpidrÚis_abstract_socket_namespacerÚunlinkrrrrr/s     zForkServer._stop_unlockedcCs( tdd„|jDƒƒstdƒ‚||_dS)Ncss|] }t|ƒtuVqdSr)ÚtypeÚstr)Ú.0ÚmodrrrÚ @s€z4ForkServer.set_forkserver_preload..z&module_names must be a list of strings)ÚallrÚ TypeError)rZ modules_namesrrrr >s z!ForkServer.set_forkserver_preloadcCs |jSr)rrrrrr DszForkServer.get_inherited_fdsc Csò | ¡t|ƒdtkrtdƒ‚t tj¡X}| |j¡t  ¡\}}t  ¡\}}|||j t   ¡g}||7}z,zt  ||¡||fWWt |¡t |¡WdƒSt |¡t |¡‚t |¡t |¡w1srwYdS)Néz too many fds)r ÚlenÚMAXFDS_TO_SENDÚ ValueErrorÚsocketÚAF_UNIXZconnectrr ÚpiperrZgetfdrZsendfdsr!)rÚfdsZclientZparent_rÚchild_wÚchild_rZparent_wZallfdsrrrr Ls2   ÿ    ð    ðz!ForkServer.connect_to_new_processc sÒ |jÛt ¡|jdur2t |jtj¡\}}|s# WdƒdSt |j¡d|_ d|_d|_d}|j rLddh‰t   d¡}‡fdd„|  ¡Dƒ}ni}t tj¡s}t d¡}| |¡t |¡sjt |d¡| ¡t ¡\}}z„sz-ForkServer.ensure_running..r1i€z-c)rrr rr r"ÚWNOHANGr!rrrrZget_preparation_dataÚitemsr0r1rZarbitrary_addressZbindrr#ÚchmodZlistenr2ÚfilenoZget_executableZ_args_from_interpreter_flagsZspawnv_passfds) rÚpidZstatusÚcmdÚdataÚlistenerZaddressÚalive_rZalive_wZ fds_to_passZexeÚargsrr;rr is\ ù        ÿ  ýçè"èzForkServer.ensure_runningN) Ú__name__Ú __module__Ú __qualname__rrrr r r r rrrrr s rc CsÎ |r5d|vr!|dur!dt ¡_z t |¡Wt ¡`nt ¡`w|D]}zt|ƒWq#ty4Yq#wt ¡t   ¡\}}t   |d¡t   |d¡dd„}t j |t jt ji} dd„|  ¡Dƒ} t  |¡i} tjtj|dk} t ¡T} |  ¡t_|  | tj¡|  |tj¡|  |tj¡ z d d „|  ¡Dƒ}|r¢nq–||vr©t‚||vrüt  |d ¡ z t  d t j¡\}}Wn t yÈYn4w|d krÎn.|  !|d¡}|durôt  "|¡}zt#||ƒWn t$yíYnwt  %|¡nt& 'd|¡q´| |vr­|  (¡d }t) *|t+d¡}t,|ƒt+kr t-d .t,|ƒ¡ƒ‚|^}}}| %¡t  /¡}|d krwd}z.sigchld_handlercSsi|] \}}|t ||¡“qSr)Úsignal)r'ÚsigÚvalrrrr<Æsÿzmain..)r@cSsg|]\}}|j‘qSr)Zfileobj)r'ÚkeyZeventsrrrÚ Úszmain..iéÿÿÿÿrz.forkserver: waitpid returned unexpected pid %drzToo many ({0:n}) fds to send)=rZcurrent_processZ _inheritingrZimport_main_pathÚ __import__Ú ImportErrorrZ _close_stdinr r2Ú set_blockingrKÚSIGCHLDÚSIGINTÚSIG_IGNr>Ú set_wakeup_fdr0r1Ú selectorsZDefaultSelectorZ getsocknameÚ _forkserverrÚregisterZ EVENT_READZselectÚ SystemExitÚreadr"r=ÚChildProcessErrorÚpopÚwaitstatus_to_exitcodeÚ write_signedÚBrokenPipeErrorr!ÚwarningsÚwarnZacceptrZrecvfdsr.r-Ú RuntimeErrorÚformatÚforkÚextendÚvaluesÚ _serve_oneÚ ExceptionÚsysÚ excepthookÚexc_infoÚstderrÚflushÚ_exitÚOSErrorÚerrnoZ ECONNABORTED)Z listener_fdrEZpreloadr6r7ÚmodnameZsig_rZsig_wrJÚhandlersZ old_handlersZ pid_to_fdrDZselectorZrfdsrAÚstsr4Ú returncodeÚsr3r5ÚcodeÚ unused_fdsÚfdÚerrrÚmain§sæ    ÿ   üÿ ÿ ý  ÿ   þ ÿë ÿÿ   þþ€þ €Ü€& ÿ€ÿ±8ør|c Csht d¡| ¡D] \}}t ||¡q |D]}t |¡q|^t_tj_ t_ t  |¡}t   ||¡}|S)NrP)rKrWr>r r!rYrrZ_resource_trackerZ_fdrÚduprZ_main) r5r3ryrtrLrMrzZparent_sentinelrxrrrri+s  þ  ricCsXd}tj}t|ƒ|kr%t ||t|ƒ¡}|stdƒ‚||7}t|ƒ|ks t |¡dS)Nózunexpected EOFr)Ú SIGNED_STRUCTÚsizer-r r\ÚEOFErrorZunpack)rzrCZlengthrwrrrÚ read_signedBs  ür‚cCsBt |¡}|rt ||¡}|dkrtdƒ‚||d…}|sdSdS)Nrzshould not get here)rZpackr Úwriterd)rzÚnÚmsgÚnbytesrrrr`Ls    ür`)NN) rrr rXrKr0ZstructrkrrbÚrrÚcontextrrrrÚ__all__r.ZStructrÚobjectrr|rir‚r`rYr r r r rrrrÚs<