JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrJFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrB  fq0@sddlZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z ddl m Z ddl mZddl mZddl mZd d d d gZd ZedZGdddeZdddZddZddZddZeZejZejZejZejZdS)N) connection)process) reduction)semaphore_tracker)spawn)utilensure_runningget_inherited_fdsconnect_to_new_processset_forkserver_preloadqc@sDeZdZddZddZddZddZd d Zd d Zd dZ dS) ForkServercCs.d|_d|_d|_d|_t|_dg|_dS)N__main__)_forkserver_address_forkserver_alive_fd_forkserver_pid_inherited_fds threadingZLock_lock_preload_modules)selfr?/opt/alt/python37/lib64/python3.7/multiprocessing/forkserver.py__init__"s  zForkServer.__init__c Cs|j|WdQRXdS)N)r_stop_unlocked)rrrr_stop*szForkServer._stopcCsJ|jdkrdSt|jd|_t|jdd|_t|jd|_dS)Nr)roscloserwaitpidunlinkr)rrrrr/s   zForkServer._stop_unlockedcCs&tdd|jDstd||_dS)z>Set list of module names to try to load in forkserver process.css|]}t|tkVqdS)N)typestr).0modrrr ?sz4ForkServer.set_forkserver_preload..z&module_names must be a list of stringsN)allr TypeError)rZ modules_namesrrrr =sz!ForkServer.set_forkserver_preloadcCs|jS)zReturn list of fds inherited from parent process. This returns None if the current process was not started by fork server. )r)rrrrr CszForkServer.get_inherited_fdsc Cs|t|dtkr tdttj}||jt \}}t \}}|||j t g}||7}zsz-ForkServer.ensure_running..r.iz-c)rrr rrr WNOHANGrrrrrZget_preparation_dataitemsr-r.rZarbitrary_addressZbindrZis_abstract_socket_namespacechmodZlistenr/filenoZget_executableZ_args_from_interpreter_flagsZspawnv_passfds) rpidZstatuscmddatalistenerZaddressalive_rZalive_wZ fds_to_passZexeargsr)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>Wtt \}}t |dt |ddd}t j |t jt ji} dd| D} t |i} tjtj|d } t} | t_| | tj| |tj| |tjxʐyx d d | D}|r,Pq,W||krtt |d d ksptdt||krdt |dxyt dt j \}}Wnt!k rPYnX|dkrP| "|d}|dk rPt #|rt $| }n&t %|std&||t '|}yt(||Wnt)k rBYnXt *|nt+,d|qW| |kr| -d0}t./|t0d }t1|t0krt2d&t1||^}}}|*t 3}|dkrVd }zpy<| *| *||||g}|4| 5t6|||| }Wn.t7k rBt8j9t8:t8j;<YnXWdt =|XnRyt(||Wnt)k rzYnX|| |<t *|x|D]}t *|qWWdQRXWn4t>k r}z|j?t?j@kr؂Wdd}~XYnXq&WWdQRXWdQRXdS)zRun forkserver.rNTFcWsdS)Nr)Z_unusedrrrsigchld_handlerszmain..sigchld_handlercSsi|]\}}t|||qSr)signal)r$sigvalrrrr9szmain..)r=cSsg|]\}}|jqSr)Zfileobj)r$keyZeventsrrr szmain..rz Not at EOF?irzChild {0:n} status is {1:n}z.forkserver: waitpid returned unexpected pid %dzToo many ({0:n}) fds to send)ArZcurrent_processZ _inheritingrZimport_main_path __import__ ImportErrorrZ _close_stdinrr/ set_blockingrHSIGCHLDSIGINTSIG_IGNr; set_wakeup_fdr-r. selectorsZDefaultSelectorZ getsockname _forkserverrregisterZ EVENT_READZselectreadAssertionError SystemExitr r:ChildProcessErrorpop WIFSIGNALEDWTERMSIG WIFEXITEDformat WEXITSTATUS write_signedBrokenPipeErrorrwarningswarnZacceptrZrecvfdsr+r* RuntimeErrorforkextendvalues _serve_one Exceptionsys excepthookexc_infostderrflush_exitOSErrorerrnoZ ECONNABORTED)Z listener_fdrBZpreloadr3r4modnameZsig_rZsig_wrGhandlersZ old_handlersZ pid_to_fdrAZselectorZrfdsr>stsr1 returncodesr0r2code unused_fdsfderrrmains                                r~cCsdtdx |D]\}}t||qWx|D]}t|q2W|^t_tj_ t_ t |}|S)NrN) rHrUr;rrrWrrZ_semaphore_trackerZ_fdrr_main)r2r0r{rvrIrJr|rzrrrrk0s   rkcCsRd}tj}x8t||krBt||t|}|s8td||7}q Wt|dS)NrMzunexpected EOFr) SIGNED_STRUCTsizer*rrYEOFErrorZunpack)r|r@lengthryrrr read_signedFs rcCs@t|}x0|r:t||}|dkr,td||d}q WdS)Nrzshould not get here)rZpackrwriterg)r|nmsgnbytesrrrrcPs   rc)NN) rtrrVrHr-Zstructrmrrerrcontextrrrr__all__r+ZStructrobjectrr~rkrrcrWr r r r rrrrs<