3 \”‘ã @sddlZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z ddl m Z ddl m Z ddl mZddl mZdd l mZdd l mZdd l mZdd l mZdd lmZddlmZdddddgZejdkrøedƒ‚dd„Zy ejZWnek �r(dd„ZYnXGdd„dejƒZe edƒ�rRdd„Z!nddl"Z"dd„Z!Gd d!„d!ej#ƒZ$Gd"d#„d#ej%ej&ƒZ'e ed$ƒ�ržej(Z)nddl"Z"d%d&„Z)Gd'd(„d(e j*ƒZ+Gd)d„dƒZ,Gd*d+„d+e,ƒZ-Gd,d„de-ƒZ.Gd-d„de-ƒZ/Gd.d/„d/ej0ƒZ1eZ2e1Z3dS)0éNé)Ú base_events)Úbase_subprocess)Úcompat)Ú constants)Ú coroutines)Úevents)Úfutures)Úselector_events)Ú selectors)Ú transports)Ú coroutine)ÚloggerÚSelectorEventLoopÚAbstractChildWatcherÚSafeChildWatcherÚFastChildWatcherÚDefaultEventLoopPolicyZwin32z+Signals are not really supported on WindowscCsdS)N©)ÚsignumÚframerrú+/usr/lib64/python3.6/asyncio/unix_events.pyÚ_sighandler_noop%srcCs|S)Nr)ÚpathrrrÚ.srcs²eZdZd!‡fdd„ Zdd„Z‡fdd„Zdd „Zd d „Zd d „Zdd„Z dd„Z d"dd„Z d#dd„Z e d$dd„ƒZdd„Ze ddddœdd„ƒZe d%ddddœdd „ƒZ‡ZS)&Ú_UnixSelectorEventLoopNcstƒj|ƒi|_dS)N)ÚsuperÚ__init__Ú_signal_handlers)ÚselfÚselector)Ú __class__rrr7s z_UnixSelectorEventLoop.__init__cCstjƒS)N)ÚsocketZ socketpair)rrrrÚ _socketpair;sz"_UnixSelectorEventLoop._socketpaircs^tƒjƒtjƒs2xFt|jƒD]}|j|ƒqWn(|jrZtjd|›d�t |d�|jj ƒdS)NzClosing the loop z@ on interpreter shutdown stage, skipping signal handlers removal)Úsource) rÚcloseÚsysÚ is_finalizingÚlistrÚremove_signal_handlerÚwarningsÚwarnÚResourceWarningÚclear)rÚsig)r!rrr%>s z_UnixSelectorEventLoop.closecCs"x|D]}|sq|j|ƒqWdS)N)Ú_handle_signal)rÚdatarrrrÚ_process_self_dataLs z)_UnixSelectorEventLoop._process_self_datac+GsHtj|ƒstj|ƒrtdƒ‚|j|ƒ|jƒytj|jj ƒƒWn2t t fk rt}zt t |ƒƒ‚WYdd}~XnXtj|||ƒ}||j|<ytj|tƒtj|dƒWn˜t k �rB}zz|j|=|j�sytjdƒWn4t t fk �r}ztjd|ƒWYdd}~XnX|jtjk�r0t dj|ƒƒ‚n‚WYdd}~XnXdS)Nz3coroutines cannot be used with add_signal_handler()Frzset_wakeup_fd(-1) failed: %szsig {} cannot be caughtéÿÿÿÿ)rZ iscoroutineZiscoroutinefunctionÚ TypeErrorÚ _check_signalZ _check_closedÚsignalÚ set_wakeup_fdZ_csockÚfilenoÚ ValueErrorÚOSErrorÚ RuntimeErrorÚstrrZHandlerrÚ siginterruptrÚinfoÚerrnoÚEINVALÚformat)rr.ÚcallbackÚargsÚexcÚhandleZnexcrrrÚadd_signal_handlerSs0     z)_UnixSelectorEventLoop.add_signal_handlercCs8|jj|ƒ}|dkrdS|jr*|j|ƒn |j|ƒdS)N)rÚgetZ _cancelledr)Z_add_callback_signalsafe)rr.rDrrrr/€s   z%_UnixSelectorEventLoop._handle_signalc&Csâ|j|ƒy |j|=Wntk r*dSX|tjkr>tj}ntj}ytj||ƒWn@tk r”}z$|jtj kr‚t dj |ƒƒ‚n‚WYdd}~XnX|jsÞytj dƒWn2t tfk rÜ}ztjd|ƒWYdd}~XnXdS)NFzsig {} cannot be caughtrzset_wakeup_fd(-1) failed: %sTr2)r4rÚKeyErrorr5ÚSIGINTÚdefault_int_handlerÚSIG_DFLr9r>r?r:r@r6r8rr=)rr.ZhandlerrCrrrr)Šs(    z,_UnixSelectorEventLoop.remove_signal_handlercCsHt|tƒstdj|ƒƒ‚d|ko,tjknsDtdj|tjƒƒ‚dS)Nzsig must be an int, not {!r}rzsig {} out of range(1, {}))Ú isinstanceÚintr3r@r5ÚNSIGr8)rr.rrrr4ªs  z$_UnixSelectorEventLoop._check_signalcCst|||||ƒS)N)Ú_UnixReadPipeTransport)rÚpipeÚprotocolÚwaiterÚextrarrrÚ_make_read_pipe_transport·sz0_UnixSelectorEventLoop._make_read_pipe_transportcCst|||||ƒS)N)Ú_UnixWritePipeTransport)rrOrPrQrRrrrÚ_make_write_pipe_transport»sz1_UnixSelectorEventLoop._make_write_pipe_transportc ks´tjƒ�¢} |jƒ} t||||||||f| |dœ| —Ž} | j| jƒ|j| ƒy| EdHWn&tk r~} z | }WYdd} ~ XnXd}|dk r¦| jƒ| j ƒEdH|‚WdQRX| S)N)rQrR) rÚget_child_watcherZ create_futureÚ_UnixSubprocessTransportÚadd_child_handlerZget_pidÚ_child_watcher_callbackÚ Exceptionr%Z_wait)rrPrBÚshellÚstdinÚstdoutÚstderrÚbufsizerRÚkwargsÚwatcherrQÚtransprCÚerrrrrÚ_make_subprocess_transport¿s$     z1_UnixSelectorEventLoop._make_subprocess_transportcCs|j|j|ƒdS)N)Zcall_soon_threadsafeZ_process_exited)rÚpidÚ returncoderbrrrrYÝsz._UnixSelectorEventLoop._child_watcher_callback)ÚsslÚsockÚserver_hostnamec csî|r|dkr&tdƒ‚n|dk r&tdƒ‚|dk rŠ|dk r>tdƒ‚tjtjtjdƒ}y |jdƒ|j||ƒEdHWqÌ|jƒ‚YqÌXnB|dkrštdƒ‚|jtjks´tj |j ƒ rÂtdj |ƒƒ‚|jdƒ|j ||||ƒEdH\}}||fS)Nz/you have to pass server_hostname when using sslz+server_hostname is only meaningful with sslz3path and sock can not be specified at the same timerFzno path and sock were specifiedz2A UNIX Domain Stream Socket was expected, got {!r}) r8r"ÚAF_UNIXÚ SOCK_STREAMÚ setblockingZ sock_connectr%ÚfamilyrÚ_is_stream_socketÚtyper@Z_create_connection_transport)rÚprotocol_factoryrrgrhriÚ transportrPrrrÚcreate_unix_connectionàs8    z-_UnixSelectorEventLoop.create_unix_connectionéd)rhÚbacklogrgc !Cs¤t|tƒrtdƒ‚|dk �r0|dk r,tdƒ‚t|ƒ}tjtjtjƒ}|dd kr´y tj t j|ƒj ƒrnt j |ƒWnBt k r„Yn0tk r²}ztjd||ƒWYdd}~XnXy|j|ƒWnjtk �r}z8|jƒ|jtjk�rdj|ƒ}ttj|ƒd‚n‚WYdd}~Xn|jƒ‚YnXn>|dk�rBtdƒ‚|jtjk�s`tj|jƒ �rntdj|ƒƒ‚tj||gƒ} |j|ƒ|jd ƒ|j|||| ƒ| S) Nz*ssl argument must be an SSLContext or Nonez3path and sock can not be specified at the same timerúz2Unable to check or remove stale UNIX socket %r: %rzAddress {!r} is already in usez-path was not specified, and no sock specifiedz2A UNIX Domain Stream Socket was expected, got {!r}F)rru)rKÚboolr3r8Ú_fspathr"rjrkÚstatÚS_ISSOCKÚosÚst_modeÚremoveÚFileNotFoundErrorr9rÚerrorZbindr%r>Z EADDRINUSEr@rmrrnroZServerZlistenrlZ_start_serving) rrprrhrtrgrcrCÚmsgZserverrrrÚcreate_unix_serversP         z)_UnixSelectorEventLoop.create_unix_server)N)NN)NN)N)N)Ú__name__Ú __module__Ú __qualname__rr#r%r1rEr/r)r4rSrUr rdrYrrr€Ú __classcell__rr)r!rr1s* -      %rÚ set_blockingcCstj|dƒdS)NF)rzr…)ÚfdrrrÚ_set_nonblockingBsr‡cCs,tj|tjƒ}|tjB}tj|tj|ƒdS)N)ÚfcntlZF_GETFLrzÚ O_NONBLOCKZF_SETFL)r†Úflagsrrrr‡Gs csŠeZdZdZd ‡fdd„ Zdd„Zdd „Zd d „Zd d „Zdd„Z dd„Z dd„Z dd„Z e jrhdd„Zd!dd„Zdd„Zdd„Z‡ZS)"rNéiNcsÐtƒj|ƒ||jd<||_||_|jƒ|_||_d|_t j |jƒj }t j |ƒpbt j|ƒpbt j|ƒs~d|_d|_d|_tdƒ‚t|jƒ|jj|jj|ƒ|jj|jj|j|jƒ|dk rÌ|jjtj|dƒdS)NrOFz)Pipe transport is for pipes/sockets only.)rrÚ_extraÚ_loopÚ_piper7Ú_filenoÚ _protocolÚ_closingrzÚfstatr{rxÚS_ISFIFOryÚS_ISCHRr8r‡Ú call_soonÚconnection_madeÚ _add_readerÚ _read_readyr Ú_set_result_unless_cancelled)rÚlooprOrPrQrRÚmode)r!rrrQs,          z_UnixReadPipeTransport.__init__cCs¼|jjg}|jdkr |jdƒn|jr0|jdƒ|jd|jƒt|jddƒ}|jdk rŽ|dk rŽtj ||jt j ƒ}|r‚|jdƒq®|jdƒn |jdk r¤|jdƒn |jdƒdd j |ƒS) NÚclosedÚclosingzfd=%sÚ _selectorÚpollingÚidleÚopenz<%s>ú ) r!r�rŽÚappendr‘r�Úgetattrr�r Ú_test_selector_eventr Z EVENT_READÚjoin)rr=r rŸrrrÚ__repr__ns$          z_UnixReadPipeTransport.__repr__cCsºytj|j|jƒ}WnDttfk r,YnŠtk rX}z|j|dƒWYdd}~Xn^X|rl|jj |ƒnJ|j j ƒr‚t j d|ƒd|_|j j|jƒ|j j|jjƒ|j j|jdƒdS)Nz"Fatal read error on pipe transportz%r was closed by peerT)rzÚreadr�Úmax_sizeÚBlockingIOErrorÚInterruptedErrorr9Ú _fatal_errorr�Z data_receivedr�Ú get_debugrr=r‘Ú_remove_readerr•Z eof_receivedÚ_call_connection_lost)rr0rCrrrr˜„s  z"_UnixReadPipeTransport._read_readycCs|jj|jƒdS)N)r�r®r�)rrrrÚ pause_reading–sz$_UnixReadPipeTransport.pause_readingcCs|jj|j|jƒdS)N)r�r—r�r˜)rrrrÚresume_reading™sz%_UnixReadPipeTransport.resume_readingcCs ||_dS)N)r�)rrPrrrÚ set_protocolœsz#_UnixReadPipeTransport.set_protocolcCs|jS)N)r�)rrrrÚ get_protocolŸsz#_UnixReadPipeTransport.get_protocolcCs|jS)N)r‘)rrrrÚ is_closing¢sz!_UnixReadPipeTransport.is_closingcCs|js|jdƒdS)N)r‘Ú_close)rrrrr%¥sz_UnixReadPipeTransport.closecCs,|jdk r(tjd|t|d�|jjƒdS)Nzunclosed transport %r)r$)rŽr*r+r,r%)rrrrÚ__del__­s  z_UnixReadPipeTransport.__del__úFatal error on pipe transportcCsZt|tƒr4|jtjkr4|jjƒrLtjd||dd�n|jj||||j dœƒ|j |ƒdS)Nz%r: %sT)Úexc_info)ÚmessageÚ exceptionrqrP) rKr9r>ZEIOr�r­rÚdebugÚcall_exception_handlerr�rµ)rrCr¹rrrr¬³s  z#_UnixReadPipeTransport._fatal_errorcCs(d|_|jj|jƒ|jj|j|ƒdS)NT)r‘r�r®r�r•r¯)rrCrrrrµÁsz_UnixReadPipeTransport._closec Cs4z|jj|ƒWd|jjƒd|_d|_d|_XdS)N)r�Úconnection_lostrŽr%r�)rrCrrrr¯Æs  z,_UnixReadPipeTransport._call_connection_losti)NN)r·)r�r‚rƒr©rr§r˜r°r±r²r³r´r%rÚPY34r¶r¬rµr¯r„rr)r!rrNMs rNcs¨eZdZd%‡fdd„ Zdd„Zdd„Zdd „Zd d „Zd d „Zdd„Z dd„Z dd„Z dd„Z dd„Z dd„Zejr|dd„Zdd„Zd&dd „Zd'd!d"„Zd#d$„Z‡ZS)(rTNc sütƒj||ƒ||jd<||_|jƒ|_||_tƒ|_d|_ d|_ t j |jƒj }tj|ƒ}tj|ƒ}tj|ƒ} |px|px| s”d|_d|_d|_tdƒ‚t|jƒ|jj|jj|ƒ| sÆ|rÞtjjdƒ rÞ|jj|jj|j|jƒ|dk rø|jjtj|dƒdS)NrOrFz?Pipe transport is only for pipes, sockets and character devicesÚaix)rrrŒrŽr7r�r�Ú bytearrayÚ_bufferÚ _conn_lostr‘rzr’r{rxr”r“ryr8r‡r�r•r–r&ÚplatformÚ startswithr—r˜r r™) rršrOrPrQrRr›Zis_charZis_fifoZ is_socket)r!rrrÓs2          z _UnixWritePipeTransport.__init__cCsÒ|jjg}|jdkr |jdƒn|jr0|jdƒ|jd|jƒt|jddƒ}|jdk r¤|dk r¤tj ||jt j ƒ}|r‚|jdƒn |jdƒ|j ƒ}|jd|ƒn |jdk rº|jdƒn |jdƒd d j |ƒS) Nrœr�zfd=%sržrŸr z bufsize=%sr¡z<%s>r¢)r!r�rŽr£r‘r�r¤r�r r¥r Z EVENT_WRITEÚget_write_buffer_sizer¦)rr=r rŸr_rrrr§øs(          z _UnixWritePipeTransport.__repr__cCs t|jƒS)N)ÚlenrÁ)rrrrrÅsz-_UnixWritePipeTransport.get_write_buffer_sizecCs6|jjƒrtjd|ƒ|jr*|jtƒƒn|jƒdS)Nz%r was closed by peer)r�r­rr=rÁrµÚBrokenPipeError)rrrrr˜s   z#_UnixWritePipeTransport._read_readycCst|tƒrt|ƒ}|sdS|js&|jrN|jtjkrs&   z$_UnixWritePipeTransport._write_readycCsdS)NTr)rrrrÚ can_write_eofXsz%_UnixWritePipeTransport.can_write_eofcCs8|jr dSd|_|js4|jj|jƒ|jj|jdƒdS)NT)r‘rÁr�r®r�r•r¯)rrrrÚ write_eof[s z!_UnixWritePipeTransport.write_eofcCs ||_dS)N)r�)rrPrrrr²dsz$_UnixWritePipeTransport.set_protocolcCs|jS)N)r�)rrrrr³gsz$_UnixWritePipeTransport.get_protocolcCs|jS)N)r‘)rrrrr´jsz"_UnixWritePipeTransport.is_closingcCs|jdk r|j r|jƒdS)N)rŽr‘rÏ)rrrrr%msz_UnixWritePipeTransport.closecCs,|jdk r(tjd|t|d�|jjƒdS)Nzunclosed transport %r)r$)rŽr*r+r,r%)rrrrr¶vs  z_UnixWritePipeTransport.__del__cCs|jdƒdS)N)rµ)rrrrÚabort|sz_UnixWritePipeTransport.abortúFatal error on pipe transportcCsPt|tjƒr*|jjƒrBtjd||dd�n|jj||||jdœƒ|j |ƒdS)Nz%r: %sT)r¸)r¹rºrqrP) rKrZ_FATAL_ERROR_IGNOREr�r­rr»r¼r�rµ)rrCr¹rrrr¬s   z$_UnixWritePipeTransport._fatal_errorcCsFd|_|jr|jj|jƒ|jjƒ|jj|jƒ|jj|j|ƒdS)NT) r‘rÁr�rÍr�r-r®r•r¯)rrCrrrrµ�s  z_UnixWritePipeTransport._closec Cs4z|jj|ƒWd|jjƒd|_d|_d|_XdS)N)r�r½rŽr%r�)rrCrrrr¯•s  z-_UnixWritePipeTransport._call_connection_lost)NN)rÑ)N)r�r‚rƒrr§rÅr˜rÊrËrÎrÏr²r³r´r%rr¾r¶rÐr¬rµr¯r„rr)r!rrTÐs$% !   rTÚset_inheritablecCsNttddƒ}tj|tjƒ}|s4tj|tj||Bƒntj|tj||@ƒdS)NZ FD_CLOEXECr)r¤rˆZF_GETFDZF_SETFD)r†Z inheritableZ cloexec_flagÚoldrrrÚ_set_inheritable¥s  rÔc@seZdZdd„ZdS)rWc Ksvd}|tjkr*|jjƒ\}}t|jƒdƒtj|f||||d|dœ|—Ž|_|dk rr|jƒt |j ƒd|d�|j_ dS)NF)r[r\r]r^Zuniversal_newlinesr_Úwb)Ú buffering) Ú subprocessÚPIPEr�r#rÔr7ÚPopenÚ_procr%r¡Údetachr\) rrBr[r\r]r^r_r`Zstdin_wrrrÚ_start±s  z_UnixSubprocessTransport._startN)r�r‚rƒrÜrrrrrW¯srWc@s<eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd S)rcGs tƒ‚dS)N)ÚNotImplementedError)rrerArBrrrrXßs z&AbstractChildWatcher.add_child_handlercCs tƒ‚dS)N)rÝ)rrerrrÚremove_child_handlerêsz)AbstractChildWatcher.remove_child_handlercCs tƒ‚dS)N)rÝ)rršrrrÚ attach_loopòsz AbstractChildWatcher.attach_loopcCs tƒ‚dS)N)rÝ)rrrrr%üszAbstractChildWatcher.closecCs tƒ‚dS)N)rÝ)rrrrÚ __enter__szAbstractChildWatcher.__enter__cCs tƒ‚dS)N)rÝ)rÚaÚbÚcrrrÚ__exit__ szAbstractChildWatcher.__exit__N) r�r‚rƒrXrÞrßr%ràrärrrrrÈs   c@sDeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dS)ÚBaseChildWatchercCsd|_i|_dS)N)r�Ú _callbacks)rrrrrszBaseChildWatcher.__init__cCs|jdƒdS)N)rß)rrrrr%szBaseChildWatcher.closecCs tƒ‚dS)N)rÝ)rÚ expected_pidrrrÚ _do_waitpidszBaseChildWatcher._do_waitpidcCs tƒ‚dS)N)rÝ)rrrrÚ_do_waitpid_allsz BaseChildWatcher._do_waitpid_allcCsf|jdk r$|dkr$|jr$tjdtƒ|jdk r<|jjtjƒ||_|dk rb|jtj|j ƒ|j ƒdS)NzCA loop is being detached from a child watcher with pending handlers) r�rær*r+ÚRuntimeWarningr)r5ÚSIGCHLDrEÚ _sig_chldré)rršrrrrßs zBaseChildWatcher.attach_loopcCsFy |jƒWn4tk r@}z|jjd|dœƒWYdd}~XnXdS)Nz$Unknown exception in SIGCHLD handler)r¹rº)rérZr�r¼)rrCrrrrì1s  zBaseChildWatcher._sig_chldcCs2tj|ƒrtj|ƒ Stj|ƒr*tj|ƒS|SdS)N)rzÚ WIFSIGNALEDÚWTERMSIGÚ WIFEXITEDÚ WEXITSTATUS)rÚstatusrrrÚ_compute_returncode=s     z$BaseChildWatcher._compute_returncodeN) r�r‚rƒrr%rèrérßrìròrrrrrås råcsLeZdZ‡fdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z ‡Z S)rcs|jjƒtƒjƒdS)N)rær-rr%)r)r!rrr%Vs zSafeChildWatcher.closecCs|S)Nr)rrrrràZszSafeChildWatcher.__enter__cCsdS)Nr)rrárârãrrrrä]szSafeChildWatcher.__exit__cGs.|jdkrtdƒ‚||f|j|<|j|ƒdS)NzICannot add child handler, the child watcher does not have a loop attached)r�r:rærè)rrerArBrrrrX`s  z"SafeChildWatcher.add_child_handlerc Cs&y |j|=dStk r dSXdS)NTF)rærG)rrerrrrÞks z%SafeChildWatcher.remove_child_handlercCs"xt|jƒD]}|j|ƒq WdS)N)r(rærè)rrerrrrérsz SafeChildWatcher._do_waitpid_allcCsÆytj|tjƒ\}}Wn(tk r>|}d}tjd|ƒYn0X|dkrLdS|j|ƒ}|jjƒrntj d||ƒy|j j |ƒ\}}Wn.t k r°|jjƒr¬tjd|dd�YnX|||f|žŽdS)Néÿz8Unknown child process pid %d, will report returncode 255rz$process %s exited with returncode %sz'Child watcher got an unexpected pid: %rT)r¸) rzÚwaitpidÚWNOHANGÚChildProcessErrorrrÉròr�r­r»ræÚpoprG)rrçrerñrfrArBrrrrèws*    zSafeChildWatcher._do_waitpid) r�r‚rƒr%ràrärXrÞrérèr„rr)r!rrKs  csPeZdZ‡fdd„Z‡fdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z ‡Z S)rcs$tƒjƒtjƒ|_i|_d|_dS)Nr)rrÚ threadingZLockÚ_lockÚ_zombiesÚ_forks)r)r!rrr¤s  zFastChildWatcher.__init__cs"|jjƒ|jjƒtƒjƒdS)N)rær-rúrr%)r)r!rrr%ªs  zFastChildWatcher.closec Cs$|j�|jd7_|SQRXdS)Nr)rùrû)rrrrrà¯szFastChildWatcher.__enter__c CsV|j�:|jd8_|js$|j r(dSt|jƒ}|jjƒWdQRXtjd|ƒdS)Nrz5Caught subprocesses termination from unknown pids: %s)rùrûrúr;r-rrÉ)rrárârãZcollateral_victimsrrrräµs zFastChildWatcher.__exit__cGsl|jdkrtdƒ‚|j�:y|jj|ƒ}Wn"tk rL||f|j|<dSXWdQRX|||f|žŽdS)NzICannot add child handler, the child watcher does not have a loop attached)r�r:rùrúr÷rGræ)rrerArBrfrrrrXÃs z"FastChildWatcher.add_child_handlerc Cs&y |j|=dStk r dSXdS)NTF)rærG)rrerrrrÞÖs z%FastChildWatcher.remove_child_handlercCsöxðytjdtjƒ\}}Wntk r,dSX|dkr:dS|j|ƒ}|j�vy|jj|ƒ\}}WnBtk r¢|j rš||j |<|j j ƒr˜t jd||ƒwd}YnX|j j ƒr¼t jd||ƒWdQRX|dkrÞt jd||ƒq|||f|žŽqWdS)Nrrz,unknown process %s exited with returncode %sz$process %s exited with returncode %sz8Caught subprocess termination from unknown pid: %d -> %dr2)rzrôrõröròrùrær÷rGrûrúr�r­rr»rÉ)rrerñrfrArBrrrréÝs6      z FastChildWatcher._do_waitpid_all) r�r‚rƒrr%ràrärXrÞrér„rr)r!rršs  csDeZdZeZ‡fdd„Zdd„Z‡fdd„Zdd„Zd d „Z ‡Z S) Ú_UnixDefaultEventLoopPolicycstƒjƒd|_dS)N)rrÚ_watcher)r)r!rrr s z$_UnixDefaultEventLoopPolicy.__init__c CsHtj�8|jdkr:tƒ|_ttjƒtjƒr:|jj|j j ƒWdQRXdS)N) rrùrýrrKrøÚcurrent_threadÚ _MainThreadrßÚ_localr�)rrrrÚ _init_watchers  z)_UnixDefaultEventLoopPolicy._init_watchercs6tƒj|ƒ|jdk r2ttjƒtjƒr2|jj|ƒdS)N)rÚset_event_looprýrKrørþrÿrß)rrš)r!rrrs  z*_UnixDefaultEventLoopPolicy.set_event_loopcCs|jdkr|jƒ|jS)N)rýr)rrrrrV&s z-_UnixDefaultEventLoopPolicy.get_child_watchercCs|jdk r|jjƒ||_dS)N)rýr%)rrarrrÚset_child_watcher0s  z-_UnixDefaultEventLoopPolicy.set_child_watcher) r�r‚rƒrZ _loop_factoryrrrrVrr„rr)r!rrüs    rü)4r>rzr5r"rxr×r&rør*Úrrrrrrr r r r r ÚlogrÚ__all__rÃÚ ImportErrorrÚfspathrwÚAttributeErrorZBaseSelectorEventLooprÚhasattrr‡rˆZ ReadTransportrNZ_FlowControlMixinZWriteTransportrTrÒrÔZBaseSubprocessTransportrWrrårrZBaseDefaultEventLoopPolicyrürrrrrrÚsl                O  F=On2