ff/bddlZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z ddl m Z ddl mZddl mZddl mZgd Zd Zej&d ZGd d eZddZdZdZdZeZej8Zej:Zej<Zej>Zy)N) connection)process) reduction)resource_tracker)spawn)util)ensure_runningget_inherited_fdsconnect_to_new_processset_forkserver_preloadqc6eZdZdZdZdZdZdZdZdZ y) ForkServerc~d|_d|_d|_d|_t j |_dg|_y)N__main__)_forkserver_address_forkserver_alive_fd_forkserver_pid_inherited_fds threadingLock_lock_preload_modulesselfs 1/usr/lib/python3.12/multiprocessing/forkserver.py__init__zForkServer.__init__"s:#' $(!#"^^% !+ cf|j5|jdddy#1swYyxYwN)r_stop_unlockedrs r_stopzForkServer._stop*s* ZZ "    ! " " "s'0cB|jytj|jd|_tj|jdd|_t j |jstj|jd|_y)Nr) roscloserwaitpidr is_abstract_socket_namespacerunlinkrs rr#zForkServer._stop_unlocked/sw    '  **+$(! 4''+#001I1IJ IId.. /#' r cLtd|Ds td||_y)z>Set list of module names to try to load in forkserver process.c3>K|]}t|tuywr")typestr).0mods r z4ForkServer.set_forkserver_preload..@s=49#=sz&module_names must be a list of stringsN)all TypeErrorr)r modules_namess rr z!ForkServer.set_forkserver_preload>s$=}==DE E -r c|jS)zReturn list of fds inherited from parent process. This returns None if the current process was not started by fork server. )rrs rr zForkServer.get_inherited_fdsDs """r c|jt|dztk\r tdt jtj 5}|j |jtj\}}tj\}}|||jtjg}||z } tj||||ftj|tj|cdddS#tj|tj|xYw#tj|tj|wxYw#1swYyxYw)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 lenMAXFDS_TO_SEND ValueErrorsocketAF_UNIXconnectrr&piperrgetfdrsendfdsr')rfdsclientparent_rchild_wchild_rparent_wallfdss rr z!ForkServer.connect_to_new_processLs$  s8a<> )^, , ]]6>> * "f NN433 4 " Hg " GXw(A(A&,,.0F cMF "!!&&1) !!! " " ""!!! " "s1A1E2D*E2-EE,E//E22E;c4|j5tj|jqt j |jtj \}}|s dddyt j|jd|_ d|_d|_d}|jrBddh}tjd}|jDcic] \}}||vs ||}}}ni}tjtj5}t!j"d} |j%| t'j(| st j*| d|j-t j.\} } |j1| g} ||j1| |j|fz}tj2} | gt'j4z}|d|gz }t'j6| || } t j| | |_ | |_||_ddddddycc}}w#t j| xYw#t j| wxYw#1swYMxYw#1swYyxYw) 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_pathsys_pathignorer<iz-c)rrr rr&r(WNOHANGr'rrrrget_preparation_dataitemsr;r<rarbitrary_addressbindr r)chmodlistenr>filenoget_executable_args_from_interpreter_flagsspawnv_passfds)rpidstatuscmd desired_keysdataxylisteneraddressalive_ralive_w fds_to_passexeargss rr zForkServer.ensure_runningis:ZZ1 +  + + -##/ jj)=)=rzzJ V1 +1 +223+/(,0)'+$,C$$ +Z8 11(;)-KAl9J1KKv~~. +($66yA g&88AHHWe,!$&779  &#+??#4g">KHOO-w8M8M ""C..0C54#D#D#FFDT3K'D--c4EC HHW%+2(,3)'*$3 +11 +1 +(L,HHW%HHW%- + +11 +1 +siAJ+A.J I&I+)JA9JA=I  *J6JJ I%%I((I??JJ JJN) __name__ __module__ __qualname__rr$r#r r r r r rrr s%-" (. #":8+r rc  |r\d|vrE|Cdtj_ tj|tj`|D]} t |tjtj\}}tj|dtj|dd}tj|tjtji} | j!D cic]\} } | tj| | } } } tj"|i} t%j$t$j&|5}t)j*5}|j-t._|j3|t(j4|j3|t(j4|j3|t(j4 |j7Dcgc]\}}|j8}}}|rn0||vr&tj:|ddk(sJd t<||vrtj:|d  tj>d tj@\}}|d k(rne| jE|d}|8tjF|} tI||tjL|ntOjPd |z||vrK|jSd 5}tUjV|tXdz}t[|tXkDr#t]dj_t[||^}}}|jMtj`}|d k(rld} |jM|jM||||g}|jc| jetg|||| }tjt|nC tI|||| |<tjL||D]}tjL|ddd\#tj`wxYw#t $rYwxYwcc} } wcc}}w#tB$rYwxYw#tJ$rYwxYw#th$rFtkjltkjntjjpjsYwxYw#tjt|wxYw#tJ$rY wxYw#1swYxYw#tv$r)}|jxtxjzk7rYd}~ d}~wwxYw#1swYnxYwdddy#1swYyxYw)zRun forkserver.rNTFcyr"rh)_unuseds rsigchld_handlerzmain..sigchld_handlers r )rSrr z Not at EOF?irz.forkserver: waitpid returned unexpected pid %dzToo many ({0:n}) fds to send)>rcurrent_process _inheritingrimport_main_path __import__ ImportErrorr _close_stdinr&r> set_blockingsignalSIGCHLDSIGINTSIG_IGNrN set_wakeup_fdr;r< selectorsDefaultSelector getsockname _forkserverrregister EVENT_READselectfileobjread SystemExitr(rLChildProcessErrorpopwaitstatus_to_exitcode write_signedBrokenPipeErrorr'warningswarnacceptrrecvfdsr9r8 RuntimeErrorformatforkextendvalues _serve_one Exceptionsys excepthookexc_infostderrflush_exitOSErrorerrno ECONNABORTED) listener_fdr`preloadrIrJmodnamesig_rsig_wrlhandlerssigval old_handlers pid_to_fdr^selectorkeyeventsrfdsrWstsrD returncodesrArEcode unused_fdsfdes rmainrs  Y%:48G # # % 1 :&&y1++-9 G 7#   779LE5OOE5!OOE5!  v~~  H'/nn&68"csC008L8 I v~~k :Yh  " " $Y(0*2*>*>*@ '(I$8$89'9#7#78%!5!56P =E__=NOMS&CKKODO d?777A.#5D}D5$$D=GGE5)"')zz"bjj'AHC!8!"+--T":".)+)B)B3)GJ% ,Wj AHHW-%MM+>@C+DE+0t#!*1-$-'//>A3EFs8n4". > E E$'H!.#//25.3  ggi!8#$D / ( 0 ( 0.5wu-M * 1 1)2B2B2D E'1'32<2>(@!#% ,Wc :.5IcNHHW-&)- " -G$-SQ++-9  &8(P 1"!"$3% $%@$-3 #  ? # 0 0 23!# $3% $%=$-$-L 77e0001 oYYYYYs7Q Q!T%UQ! Q.-Q.7T%= R T% R  T% RT%RT%A S, (S/+S, ,S//T T T TT TT" T%% U.U UUUU# U//U8cntjd|jD]\}}tj|||D]}tj||^t _tj_ t _ tj|}tj||}|S)Nrm)ruryrNr&r'r}rr_resource_tracker_fdrdupr_main) rErArrrrrparent_sentinelrs rrr+s NN$ S c3    %("[%''+ ffWoO ;;w 0D Kr cd}tj}t||krCtj||t|z }|s t d||z }t||krCtj |dS)Nr zunexpected EOFr) SIGNED_STRUCTsizer8r&rEOFErrorunpack)rr[lengthrs r read_signedrBsu D   F d)f  GGBT* ++, ,   d)f     %a ((r ctj|}|r/tj||}|dk(r t d||d}|r.yy)Nrzshould not get here)rpackr&writer)rnmsgnbytess rrrLsH   Q C "c" Q;45 5&'l r )NN) rr&rzrur;structrrrrrcontextrrrr __all__r9Structrobjectrrrrrr}r r r r rhr rrs   % c" A+A+NAH.)l ++11$;;$;;r