B âÁ÷S•D‹ã@sþddlZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z ddl m Z ddl mZddl mZddl mZd d d d gZd Ze d¡ZGdd„deƒZddd„Zdd„Zdd„Zdd„ZeƒZejZejZejZejZdS)éNé)Ú connection)Úprocess)Ú reduction)Úsemaphore_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ú=/opt/alt/python37/lib/python3.7/multiprocessing/forkserver.pyÚ__init__"s  zForkServer.__init__c Cs|j| ¡WdQRXdS)N)rÚ_stop_unlocked)rrrrÚ_stop*szForkServer._stopcCsJ|jdkrdSt |j¡d|_t |jd¡d|_t |j¡d|_dS)Nr)rÚosÚcloserÚwaitpidÚunlinkr)rrrrr/s   zForkServer._stop_unlockedcCs&tdd„|jDƒƒstdƒ‚||_dS)Ncss|]}t|ƒtkVqdS)N)ÚtypeÚstr)Ú.0Úmodrrrú ?sz4ForkServer.set_forkserver_preload..z&module_names must be a list of strings)ÚallrÚ TypeError)rZ modules_namesrrrr =sz!ForkServer.set_forkserver_preloadcCs|jS)N)r)rrrrr CszForkServer.get_inherited_fdsc CsÎ| ¡t|ƒdtkr tdƒ‚t tj¡˜}| |j¡t  ¡\}}t  ¡\}}|||j t   ¡g}||7}zƒsz-ForkServer.ensure_running..r.i€z-c)rrr rrr ÚWNOHANGrrrrrZget_preparation_dataÚitemsr-r.rZarbitrary_addressZbindrZis_abstract_socket_namespaceÚchmodZlistenr/ÚfilenoZget_executableZ_args_from_interpreter_flagsZspawnv_passfds) rÚpidÚstatusÚcmdÚdataÚlistenerZaddressÚalive_rZalive_wZ fds_to_passZexeÚargsr)r8rr hsL              zForkServer.ensure_runningN) Ú__name__Ú __module__Ú __qualname__rrrr r r r rrrrr src Csî|rhd|kr8|dk r8dt ¡_zt |¡Wdt ¡`Xx.|D]&}y t|ƒWq>tk rbYq>Xq>Wt ¡t   ¡\}}t   |d¡t   |d¡dd„}t j |t jt ji} dd„|  ¡Dƒ} t  |¡i} tjtj|d} t ¡î} |  ¡t_|  | tj¡|  |tj¡|  |tj¡x°yrx d d „|  ¡Dƒ}|r,Pq,W||krZt‚||krJt  |d ¡xØyt  d t j¡\}}Wnt k r PYnX|d kr®P|  !|d¡}|dk r6t  "|¡rÞt  #|¡ }n&t  $|¡sút%d &||¡ƒ‚t  '|¡}yt(||ƒWnt)k r(YnXt  *|¡nt+ ,d|¡qrW| |kr˜|  -¡d 0}t. /|t0d¡}t1|ƒt0kr”t2d &t1|ƒ¡ƒ‚|^}}}| *¡t  3¡}|d krk rÎ}z|j?t?j@kr¾‚Wdd}~XYnXq&WWdQRXWdQRXdS)NrTFcWsdS)Nr)Z_unusedrrrÚsigchld_handler»szmain..sigchld_handlercSsi|]\}}t ||¡|“qSr)Úsignal)r$ÚsigÚvalrrrr9Åszmain..)r=cSsg|]\}}|j‘qSr)Zfileobj)r$ÚkeyZeventsrrrú Ùszmain..iéÿÿÿÿrzChild {0:n} status is {1:n}z.forkserver: waitpid returned unexpected pid %drzToo many ({0:n}) fds to send)ArZcurrent_processZ _inheritingrZimport_main_pathÚ __import__Ú ImportErrorrZ _close_stdinrr/Ú set_blockingrIÚSIGCHLDÚSIGINTÚSIG_IGNr;Ú set_wakeup_fdr-r.Ú selectorsZDefaultSelectorZ getsocknameÚ _forkserverrÚregisterZ EVENT_READZselectÚ SystemExitÚreadr r:ÚChildProcessErrorÚpopÚ WIFSIGNALEDÚWTERMSIGÚ WIFEXITEDÚAssertionErrorÚformatÚ WEXITSTATUSÚ write_signedÚBrokenPipeErrorrÚwarningsÚwarnZacceptrZrecvfdsr+r*Ú RuntimeErrorÚforkÚextendÚvaluesÚ _serve_oneÚ ExceptionÚsysÚ excepthookÚexc_infoÚstderrÚflushÚ_exitÚOSErrorÚerrnoZ ECONNABORTED)Z listener_fdrCZpreloadr3r4ÚmodnameZsig_rZsig_wrHÚhandlersZ old_handlersZ pid_to_fdrBZselectorZrfdsr>Ústsr1Ú returncodeÚsr0r2ÚcodeÚ unused_fdsÚfdÚerrrÚmain¦sÀ                                r~cCsdt d¡x | ¡D]\}}t ||¡qWx|D]}t |¡q2W|^t_tj_ t_ t   |¡}|S)NrN) rIrUr;rrrWrrZ_semaphore_trackerZ_fdrrÚ_main)r2r0r{rvrJrKr|rzrrrrk0s   rkcCsRd}tj}x8t|ƒ|krBt ||t|ƒ¡}|s8tdƒ‚||7}q Wt |¡dS)Nózunexpected EOFr)Ú SIGNED_STRUCTÚsizer*rrZÚEOFErrorÚunpack)r|rAÚlengthryrrrÚ read_signedFs r†cCs@t |¡}x0|r:t ||¡}|dkr,tdƒ‚||d…}q WdS)Nrzshould not get here)rÚpackrÚwriterg)r|ÚnÚmsgÚnbytesrrrrcPs   rc)NN) rtrrVrIr-ÚstructrmrreÚrrÚcontextrrrrÚ__all__r+ÚStructrÚobjectrr~rkr†rcrWr r r r rrrrÚs<