3 Õì2a”‘ã @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ÚDefaultEventLoopPolicyÚwin32z+Signals are not really supported on WindowscCsdS)N©)ÚsignumÚframerrú0/opt/alt/python36/lib64/python3.6/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)r rrrÚ _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)r r/Ú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)r r/rErrrr0€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: %sTr3)r5rÚKeyErrorr6ÚSIGINTÚdefault_int_handlerÚSIG_DFLr:r?r@r;rAr7r9rr>)r r/ZhandlerrDrrrr*Š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Úintr4rAr6ÚNSIGr9)r r/rrrr5ª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)r rPrQrRrSrrrÚ_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)rRrS) rÚget_child_watcherZ create_futureÚ_UnixSubprocessTransportÚadd_child_handlerZget_pidÚ_child_watcher_callbackÚ Exceptionr&Z_wait)r rQrCÚshellÚstdinÚstdoutÚstderrÚbufsizerSÚkwargsÚwatcherrRÚtransprDÚerrrrrÚ_make_subprocess_transport¿s$     z1_UnixSelectorEventLoop._make_subprocess_transportcCs|j|j|ƒdS)N)Zcall_soon_threadsafeZ_process_exited)r ÚpidÚ returncodercrrrrZÝ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}) r9r#ÚAF_UNIXÚ SOCK_STREAMÚ setblockingZ sock_connectr&ÚfamilyrÚ_is_stream_socketÚtyperAZ_create_connection_transport)r Úprotocol_factoryrrhrirjÚ transportrQrrrÚcreate_unix_connectionàs8    z-_UnixSelectorEventLoop.create_unix_connectionéd)riÚbacklogrhc !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)rrv)rLÚboolr4r9Ú_fspathr#rkrlÚstatÚS_ISSOCKÚosÚst_modeÚremoveÚFileNotFoundErrorr:rÚerrorZbindr&r?Z EADDRINUSErArnrrorpZServerZlistenrmZ_start_serving) r rqrrirurhrdrDÚmsgZserverrrrÚcreate_unix_serversP         z)_UnixSelectorEventLoop.create_unix_server)N)NN)NN)N)N)Ú__name__Ú __module__Ú __qualname__rr$r&r2rFr0r*r5rTrVr rerZrsr�Ú __classcell__rr)r"rr1s* -      %rÚ set_blockingcCstj|dƒdS)NF)r{r†)ÚfdrrrÚ_set_nonblockingBsrˆcCs,tj|tjƒ}|tjB}tj|tj|ƒdS)N)ÚfcntlZF_GETFLr{Ú 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)"rOé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)NrPFz)Pipe transport is for pipes/sockets only.)rrÚ_extraÚ_loopÚ_piper8Ú_filenoÚ _protocolÚ_closingr{Úfstatr|ryÚS_ISFIFOrzÚS_ISCHRr9rˆÚ call_soonÚconnection_madeÚ _add_readerÚ _read_readyr Ú_set_result_unless_cancelled)r ÚlooprPrQrRrSÚ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)r r>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)r{Úreadr�Úmax_sizeÚBlockingIOErrorÚInterruptedErrorr:Ú _fatal_errorr‘Z data_receivedrŽÚ get_debugrr>r’Ú_remove_readerr–Z eof_receivedÚ_call_connection_lost)r r1rDrrrr™„s  z"_UnixReadPipeTransport._read_readycCs|jj|jƒdS)N)rŽr¯r�)r rrrÚ pause_reading–sz$_UnixReadPipeTransport.pause_readingcCs|jj|j|jƒdS)N)rŽr˜r�r™)r rrrÚresume_reading™sz%_UnixReadPipeTransport.resume_readingcCs ||_dS)N)r‘)r rQrrrÚ set_protocolœsz#_UnixReadPipeTransport.set_protocolcCs|jS)N)r‘)r rrrÚ get_protocolŸsz#_UnixReadPipeTransport.get_protocolcCs|jS)N)r’)r rrrÚ is_closing¢sz!_UnixReadPipeTransport.is_closingcCs|js|jdƒdS)N)r’Ú_close)r rrrr&¥sz_UnixReadPipeTransport.closecCs,|jdk r(tjd|t|d�|jjƒdS)Nzunclosed transport %r)r%)r�r+r,r-r&)r rrrÚ__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Ú exceptionrrrQ) rLr:r?ZEIOrŽr®rÚdebugÚcall_exception_handlerr‘r¶)r rDrºrrrr­³s  z#_UnixReadPipeTransport._fatal_errorcCs(d|_|jj|jƒ|jj|j|ƒdS)NT)r’rŽr¯r�r–r°)r rDrrrr¶Ász_UnixReadPipeTransport._closec Cs4z|jj|ƒWd|jjƒd|_d|_d|_XdS)N)r‘Úconnection_lostr�r&rŽ)r rDrrrr°Æ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"rrOMs rOcs¨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)(rUNc 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)NrPrFz?Pipe transport is only for pipes, sockets and character devicesÚaix)rrr�r�r8r�r‘Ú bytearrayÚ_bufferÚ _conn_lostr’r{r“r|ryr•r”rzr9rˆrŽr–r—r'ÚplatformÚ startswithr˜r™r rš) r r›rPrQrRrSrœ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§)r r>r!r r`rrrr¨øs(          z _UnixWritePipeTransport.__repr__cCs t|jƒS)N)ÚlenrÂ)r rrrrÆ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)r rrrr™s   z#_UnixWritePipeTransport._read_readycCst|tƒrt|ƒ}|sdS|js&|jrN|jtjkrs&   z$_UnixWritePipeTransport._write_readycCsdS)NTr)r rrrÚ can_write_eofXsz%_UnixWritePipeTransport.can_write_eofcCs8|jr dSd|_|js4|jj|jƒ|jj|jdƒdS)NT)r’rÂrŽr¯r�r–r°)r rrrÚ write_eof[s z!_UnixWritePipeTransport.write_eofcCs ||_dS)N)r‘)r rQrrrr³dsz$_UnixWritePipeTransport.set_protocolcCs|jS)N)r‘)r rrrr´gsz$_UnixWritePipeTransport.get_protocolcCs|jS)N)r’)r rrrrµjsz"_UnixWritePipeTransport.is_closingcCs|jdk r|j r|jƒdS)N)r�r’rÐ)r rrrr&msz_UnixWritePipeTransport.closecCs,|jdk r(tjd|t|d�|jjƒdS)Nzunclosed transport %r)r%)r�r+r,r-r&)r rrrr·vs  z_UnixWritePipeTransport.__del__cCs|jdƒdS)N)r¶)r rrrÚ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»rrrQ) rLrZ_FATAL_ERROR_IGNORErŽr®rr¼r½r‘r¶)r rDrº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°)r rDrrrr¶�s  z_UnixWritePipeTransport._closec Cs4z|jj|ƒWd|jjƒd|_d|_d|_XdS)N)r‘r¾r�r&rŽ)r rDrrrr°•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"rrUÐs$% !   rUÚ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)rXc 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Õr8ÚPopenÚ_procr&r¢Údetachr]) r rCr\r]r^r_r`raZstdin_wrrrÚ_start±s  z_UnixSubprocessTransport._startN)r‚rƒr„rÝrrrrrX¯srXc@s<eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd S)rcGs tƒ‚dS)N)ÚNotImplementedError)r rfrBrCrrrrYßs z&AbstractChildWatcher.add_child_handlercCs tƒ‚dS)N)rÞ)r rfrrrÚremove_child_handlerêsz)AbstractChildWatcher.remove_child_handlercCs tƒ‚dS)N)rÞ)r r›rrrÚ attach_loopòsz AbstractChildWatcher.attach_loopcCs tƒ‚dS)N)rÞ)r rrrr&üszAbstractChildWatcher.closecCs tƒ‚dS)N)rÞ)r rrrÚ __enter__szAbstractChildWatcher.__enter__cCs tƒ‚dS)N)rÞ)r ÚaÚbÚcrrrÚ__exit__ szAbstractChildWatcher.__exit__N) r‚rƒr„rYrß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)r rrrrszBaseChildWatcher.__init__cCs|jdƒdS)N)rà)r rrrr&szBaseChildWatcher.closecCs tƒ‚dS)N)rÞ)r Ú expected_pidrrrÚ _do_waitpidszBaseChildWatcher._do_waitpidcCs tƒ‚dS)N)rÞ)r rrrÚ_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*r6ÚSIGCHLDrFÚ _sig_chldrê)r r›rrrràs zBaseChildWatcher.attach_loopcCsFy |jƒWn4tk r@}z|jjd|dœƒWYdd}~XnXdS)Nz$Unknown exception in SIGCHLD handler)rºr»)rêr[rŽr½)r rDrrrrí1s  zBaseChildWatcher._sig_chldcCs2tj|ƒrtj|ƒ Stj|ƒr*tj|ƒS|SdS)N)r{Ú 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)r rrrráZszSafeChildWatcher.__enter__cCsdS)Nr)r râ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é)r rfrBrCrrrrY`s  z"SafeChildWatcher.add_child_handlerc Cs&y |j|=dStk r dSXdS)NTF)rçrH)r rfrrrrßks z%SafeChildWatcher.remove_child_handlercCs"xt|jƒD]}|j|ƒq WdS)N)r)rçré)r rfrrrrê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¹) r{ÚwaitpidÚWNOHANGÚChildProcessErrorrrÊrórŽr®r¼rçÚpoprH)r rèrfròrgrBrCrrrréws*    zSafeChildWatcher._do_waitpid) r‚rƒr„r&rárårYrß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ü)r rrrrá¯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Ê)r râ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ørHrç)r rfrBrCrgrrrrYÃs z"FastChildWatcher.add_child_handlerc Cs&y |j|=dStk r dSXdS)NTF)rçrH)r rfrrrrßÖ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 -> %dr3)r{rõrör÷rórúrçrørHrürûrŽr®rr¼rÊ)r rfròrgrBrCrrrrêÝs6      z FastChildWatcher._do_waitpid_all) r‚rƒr„rr&rárårYrß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þrrLrùÚcurrent_threadÚ _MainThreadràÚ_localrŽ)r rrrÚ _init_watchers  z)_UnixDefaultEventLoopPolicy._init_watchercs6tƒj|ƒ|jdk r2ttjƒtjƒr2|jj|ƒdS)N)rÚset_event_looprþrLrùrÿrrà)r r›)r"rrrs  z*_UnixDefaultEventLoopPolicy.set_event_loopcCs|jdkr|jƒ|jS)N)rþr)r rrrrW&s z-_UnixDefaultEventLoopPolicy.get_child_watchercCs|jdk r|jjƒ||_dS)N)rþr&)r rbrrrÚset_child_watcher0s  z-_UnixDefaultEventLoopPolicy.set_child_watcher) r‚rƒr„rZ _loop_factoryrrrrWrr…rr)r"rrýs    rý)4r?r{r6r#ryrØr'rùr+Úrrrrrrr r r r r ÚlogrÚ__all__rÄÚ ImportErrorrÚfspathrxÚAttributeErrorZBaseSelectorEventLooprÚhasattrrˆr‰Z ReadTransportrOZ_FlowControlMixinZWriteTransportrUrÓrÕZBaseSubprocessTransportrXrrærrZBaseDefaultEventLoopPolicyrýrrrrrrÚsl                O  F=On2