o ?Og@s ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl m Z ddl mZddl mZddl mZddl mZddl mZdd l mZdd l mZdd l mZdd l mZdd lmZdZe jdkr~edddZddZGdddejZGdddej Z!Gdddej"ej#Z$Gdddej%Z&GdddZ'Gdd d e'Z(Gd!d"d"e'Z)Gd#d$d$e)Z*Gd%d&d&e)Z+Gd'd(d(e'Z,Gd)d*d*e'Z-Gd+d,d,ej.Z/eZ0e/Z1dS)-N) base_events)base_subprocess) constants) coroutines)events) exceptions)futures)selector_events)tasks) transports)logger)SelectorEventLoopAbstractChildWatcherSafeChildWatcherFastChildWatcherPidfdChildWatcherMultiLoopChildWatcherThreadedChildWatcherDefaultEventLoopPolicyZwin32z+Signals are not really supported on WindowscCs dSN)signumframerr:/opt/alt/python310/lib64/python3.10/asyncio/unix_events.py_sighandler_noop*srcCs$zt|WSty|YSwr)oswaitstatus_to_exitcode ValueError)statusrrrr/s   rcseZdZ d(fdd ZfddZddZdd Zd d Zd d ZddZ  d)ddZ  d)ddZ d(ddZ ddZ d(dddddddZ d(ddddddddZd d!Zd"d#Zd$d%Zd&d'ZZS)*_UnixSelectorEventLoopNcst|i|_dSr)super__init___signal_handlers)selfselector __class__rrr"?  z_UnixSelectorEventLoop.__init__cs`ttst|jD]}||qdS|jr.tjd|dt |d|j dSdS)NzClosing the loop z@ on interpreter shutdown stage, skipping signal handlers removalsource) r!closesys is_finalizinglistr#remove_signal_handlerwarningswarnResourceWarningclearr$sigr&rrr+Cs  z_UnixSelectorEventLoop.closecCs|D] }|sq||qdSr)_handle_signal)r$datarrrr_process_self_dataQs  z)_UnixSelectorEventLoop._process_self_datac Gs0 t|s t|rtd|||z t|j Wnt t fy6}zt t |d}~wwt|||d}||j|<zt|tt|dWdSt y}z8|j|=|jsztdWnt t fy}z td|WYd}~nd}~ww|jtjkrt d|dd}~ww)Nz3coroutines cannot be used with add_signal_handler()Fset_wakeup_fd(-1) failed: %ssig  cannot be caught)rZ iscoroutineZiscoroutinefunction TypeError _check_signalZ _check_closedsignal set_wakeup_fdZ_csockfilenorOSError RuntimeErrorstrrZHandler#r siginterruptr infoerrnoEINVAL)r$r5callbackargsexchandleZnexcrrradd_signal_handlerXs@      z)_UnixSelectorEventLoop.add_signal_handlercCs< |j|}|dur dS|jr||dS||dSr)r#getZ _cancelledr/Z_add_callback_signalsafe)r$r5rLrrrr6s z%_UnixSelectorEventLoop._handle_signalc Cs ||z|j|=Wn tyYdSw|tjkr tj}ntj}zt||WntyF}z|jtj krAt d|dd}~ww|jsnzt dWdSt tfym}z t d|WYd}~dSd}~wwdS)NFr;r<r9r:T)r>r#KeyErrorr?SIGINTdefault_int_handlerSIG_DFLrBrGrHrCr@rr rF)r$r5handlerrKrrrr/s8      z,_UnixSelectorEventLoop.remove_signal_handlercCs8 t|ts td||tvrtd|dS)Nzsig must be an int, not zinvalid signal number ) isinstanceintr=r? valid_signalsrr4rrrr>s   z$_UnixSelectorEventLoop._check_signalcCt|||||Sr)_UnixReadPipeTransportr$pipeprotocolwaiterextrarrr_make_read_pipe_transportz0_UnixSelectorEventLoop._make_read_pipe_transportcCrWr)_UnixWritePipeTransportrYrrr_make_write_pipe_transportr_z1_UnixSelectorEventLoop._make_write_pipe_transportc stU} | std|} t||||||||f| |d| } | | |j| z| IdHWnt t fy?t yQ| | IdHwWd| S1s]wY| S)NzRasyncio.get_child_watcher() is not activated, subprocess support is not installed.)r\r])rget_child_watcher is_activerC create_future_UnixSubprocessTransportadd_child_handlerZget_pid_child_watcher_callback SystemExitKeyboardInterrupt BaseExceptionr+Z_wait) r$r[rJshellstdinstdoutstderrbufsizer]kwargswatcherr\transprrr_make_subprocess_transports:     z1_UnixSelectorEventLoop._make_subprocess_transportcCs||j|j|dSr)call_soon_threadsafe call_soonZ_process_exited)r$pid returncoderrrrrrgsz._UnixSelectorEventLoop._child_watcher_callback)sslsockserver_hostnamessl_handshake_timeoutc s|r |dur tdn|durtd|durtd|durO|dur(tdt|}ttjtjd}z|d|||IdHWn(||durWtd|j tjksc|j tjkrjtd||d|j |||||d IdH\}}||fS) Nz/you have to pass server_hostname when using sslz+server_hostname is only meaningful with ssl1ssl_handshake_timeout is only meaningful with ssl3path and sock can not be specified at the same timerFzno path and sock were specified.A UNIX Domain Stream Socket was expected, got )r{) rrfspathsocketAF_UNIX SOCK_STREAM setblockingZ sock_connectr+familytypeZ_create_connection_transport) r$protocol_factorypathrxryrzr{ transportr[rrrcreate_unix_connectionsN     z-_UnixSelectorEventLoop.create_unix_connectiondT)rybacklogrxr{ start_servingc st|tr td|dur|std|dur|dur tdt|}ttjtj}|ddvrezt t |j rBt |Wn!t yLYntyd}z td||WYd}~nd}~wwz||WnFty} z|| jtjkrd|d} ttj| dd} ~ w||durtd |jtjks|jtjkrtd ||d t||g||||} |r| tdIdH| S) Nz*ssl argument must be an SSLContext or Noner|r}r)rz2Unable to check or remove stale UNIX socket %r: %rzAddress z is already in usez-path was not specified, and no sock specifiedr~F)rTboolr=rrrrrrstatS_ISSOCKst_moderemoveFileNotFoundErrorrBr errorZbindr+rGZ EADDRINUSErrrrZServerZ_start_servingr sleep) r$rrryrrxr{rerrrKmsgZserverrrrcreate_unix_serversp            z)_UnixSelectorEventLoop.create_unix_serverc sztjWn tytdwz|}Wnttjfy-}ztdd}~wwzt|j }Wn t yBtdw|rG|n|}|sMdS| } | | d|||||d| IdHS)Nzos.sendfile() is not availableznot a regular filer) rsendfileAttributeErrorrSendfileNotAvailableErrorrAioUnsupportedOperationfstatst_sizerBrd_sock_sendfile_native_impl) r$ryfileoffsetcountrArZfsize blocksizefutrrr_sock_sendfile_nativeUs6         z,_UnixSelectorEventLoop._sock_sendfile_nativec Cs*|} |dur |||r||||dS|r2||}|dkr2||||||dSz t| |||} Wnttfya|durO| ||| | |j || |||||| YdSt y} zK|dur| j t jkrt| turtdt j} | | _| } |dkrtd} |||||| n|||||| WYd} ~ dSWYd} ~ dSd} ~ wttfyty} z|||||| WYd} ~ dSd} ~ ww| dkr||||||dS|| 7}|| 7}|dur| ||| | |j || |||||| dS)Nrzsocket is not connectedzos.sendfile call failed)rA remove_writer cancelled_sock_sendfile_update_fileposZ set_resultrrBlockingIOErrorInterruptedError_sock_add_cancellation_callbackZ add_writerrrBrGZENOTCONNrConnectionError __cause__rrZ set_exceptionrhrirj)r$rZ registered_fdryrArrr total_sentfdZsentrKnew_excrrrrrlst           z1_UnixSelectorEventLoop._sock_sendfile_native_implcCs |dkrt||tjdSdSNr)rlseekSEEK_SET)r$rArrrrrrsz4_UnixSelectorEventLoop._sock_sendfile_update_fileposcsfdd}||dS)Ncs.|r}|dkr|dSdSdS)Nr9)rrAr)rrr$ryrrcbs zB_UnixSelectorEventLoop._sock_add_cancellation_callback..cb)Zadd_done_callback)r$rryrrrrrsz6_UnixSelectorEventLoop._sock_add_cancellation_callbackrNN)__name__ __module__ __qualname__r"r+r8rMr6r/r>r^rarsrgrrrrrr __classcell__rrr&rr 9sD -       . CFr cseZdZdZdfdd ZddZddZd d Zd d Zd dZ ddZ ddZ ddZ e jfddZdddZddZddZZS) rXiNcst|||jd<||_||_||_||_d|_d|_ t |jj }t |sBt |sBt |sBd|_d|_d|_tdt |jd|j|jj||j|jj|j|j|durm|jtj|ddSdS)NrZFz)Pipe transport is for pipes/sockets only.)r!r"_extra_loop_piperA_fileno _protocol_closing_pausedrrrrS_ISFIFOrS_ISCHRr set_blockingruconnection_made _add_reader _read_readyr _set_result_unless_cancelled)r$looprZr[r\r]moder&rrr"s8      z_UnixReadPipeTransport.__init__cCs|jjg}|jdur|dn|jr|d|d|jt|jdd}|jdurH|durHt ||jt j }|rB|dn|dn|jdurS|dn|dd d |S) Nclosedclosingfd= _selectorpollingidleopen<{}> )r'rrappendrrgetattrrr _test_selector_event selectorsZ EVENT_READformatjoin)r$rFr%rrrr__repr__s$          z_UnixReadPipeTransport.__repr__c Csz t|j|j}Wn$ttfyYdSty.}z ||dWYd}~dSd}~ww|r9|j |dS|j rDt d|d|_|j |j|j |jj|j |jddS)Nz"Fatal read error on pipe transport%r was closed by peerT)rreadrmax_sizerrrB _fatal_errorrZ data_receivedr get_debugr rFr_remove_readerruZ eof_received_call_connection_lost)r$r7rKrrrrs   z"_UnixReadPipeTransport._read_readycCsB|js|jrdSd|_|j|j|jrtd|dSdS)NTz%r pauses reading)rrrrrrr debugr$rrr pause_readings  z$_UnixReadPipeTransport.pause_readingcCsF|js|jsdSd|_|j|j|j|jr!td|dSdS)NFz%r resumes reading) rrrrrrrr rrrrrresume_readings  z%_UnixReadPipeTransport.resume_readingcC ||_dSrrr$r[rrr set_protocol z#_UnixReadPipeTransport.set_protocolcC|jSrrrrrr get_protocolz#_UnixReadPipeTransport.get_protocolcCrrrrrrr is_closingrz!_UnixReadPipeTransport.is_closingcCs|js |ddSdSr)r_closerrrrr+!sz_UnixReadPipeTransport.closecC0|jdur|d|t|d|jdSdSNzunclosed transport r)rr2r+r$_warnrrr__del__% z_UnixReadPipeTransport.__del__Fatal error on pipe transportcCsZt|tr|jtjkr|jrtjd||ddn |j||||j d| |dSNz%r: %sTexc_info)message exceptionrr[) rTrBrGZEIOrrr rcall_exception_handlerrrr$rKrrrrr*s z#_UnixReadPipeTransport._fatal_errorcCs(d|_|j|j|j|j|dSNT)rrrrrurr$rKrrrr8sz_UnixReadPipeTransport._closecCNz|j|W|jd|_d|_d|_dS|jd|_d|_d|_wrrZconnection_lostrr+rrrrrr=   z,_UnixReadPipeTransport._call_connection_lostrr)rrrrr"rrrrrrrr+r0r1rrrrrrrr&rrXs rXcseZdZd%fdd ZddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZejfddZddZd&dd Zd'd!d"Zd#d$ZZS)(r`Nc st||||jd<||_||_||_t|_d|_ d|_ t |jj }t|}t|}t|} |sJ|sJ| sJd|_d|_d|_tdt |jd|j|jj|| sd|rptjdsp|j|jj|j|j|dur|jtj|ddSdS)NrZrFz?Pipe transport is only for pipes, sockets and character devicesaix)r!r"rrrArr bytearray_buffer _conn_lostrrrrrrrrrrrrurr,platform startswithrrr r) r$rrZr[r\r]rZis_charZis_fifoZ is_socketr&rrr"Js8        z _UnixWritePipeTransport.__init__cCs|jjg}|jdur|dn|jr|d|d|jt|jdd}|jdurT|durTt ||jt j }|rB|dn|d| }|d|n|jdur_|dn|dd d |S) Nrrrrrrzbufsize=rrr)r'rrrrrrrr rrZ EVENT_WRITEget_write_buffer_sizerr)r$rFr%rrorrrros(          z _UnixWritePipeTransport.__repr__cCs t|jSr)lenr rrrrr rz-_UnixWritePipeTransport.get_write_buffer_sizecCs8|jr td||jr|tdS|dS)Nr)rrr rFr rBrokenPipeErrorrrrrrs   z#_UnixWritePipeTransport._read_readyc Cs&t|tr t|}|s dS|js|jr'|jtjkrtd|jd7_dS|j sz t |j |}Wn5t tfy@d}Yn)ttfyItyh}z|jd7_||dWYd}~dSd}~ww|t|krqdS|dkr}t||d}|j|j |j|j |7_ |dS)Nz=pipe closed by peer or os.write(pipe, data) raised exception.rr#Fatal write error on pipe transport)rTr memoryviewr rrZ!LOG_THRESHOLD_FOR_CONNLOST_WRITESr warningr rwriterrrrhrirjrrrZ _add_writer _write_readyZ_maybe_pause_protocol)r$r7nrKrrrrs:       z_UnixWritePipeTransport.writec Csz t|j|j}Wn@ttfyYdSttfytyJ}z |j |j d7_ |j |j| |dWYd}~dSd}~ww|t|jkrs|j |j |j||jrq|j |j|ddS|dkr|jd|=dSdS)Nrrr)rrrr rrrhrirjr3r r_remove_writerrrZ_maybe_resume_protocolrrr)r$rrKrrrrs0   z$_UnixWritePipeTransport._write_readycCdSrrrrrr can_write_eofz%_UnixWritePipeTransport.can_write_eofcCs<|jrdSd|_|js|j|j|j|jddSdSr)rr rrrrurrrrr write_eofsz!_UnixWritePipeTransport.write_eofcCrrrrrrrrrz$_UnixWritePipeTransport.set_protocolcCrrrrrrrrrz$_UnixWritePipeTransport.get_protocolcCrrrrrrrrrz"_UnixWritePipeTransport.is_closingcCs$|jdur|js|dSdSdSr)rrrrrrrr+s z_UnixWritePipeTransport.closecCrrrrrrrrrz_UnixWritePipeTransport.__del__cC|ddSr)rrrrrabortz_UnixWritePipeTransport.abortrcCsNt|tr|jrtjd||ddn |j||||jd||dSr) rTrBrrr rrrrrrrrrs  z$_UnixWritePipeTransport._fatal_errorcCsFd|_|jr |j|j|j|j|j|j|j|dSr) rr rrrr3rrurrrrrrs  z_UnixWritePipeTransport._closecCrrrrrrrr rz-_UnixWritePipeTransport._call_connection_lostrrr)rrrr"rr rrrrrrrrr+r0r1rrrrrrrrr&rr`Gs$% #   r`c@seZdZddZdS)rec Ksd}|tjkrtjdrt\}}z7tj|f||||d|d||_|dur:| t | d|d|j_ d}W|durI| | dSdS|durX| | ww)NrF)rkrlrmrnZuniversal_newlinesrowb) buffering) subprocessPIPEr,r r rZ socketpairPopen_procr+rdetachrl) r$rJrkrlrmrnrorpZstdin_wrrr_starts0    z_UnixSubprocessTransport._startN)rrrr%rrrrres rec@sFeZdZ ddZddZddZddZd d Zd d Zd dZ dS)rcG trNotImplementedErrorr$rvrIrJrrrrfCsz&AbstractChildWatcher.add_child_handlercCr&rr'r$rvrrrremove_child_handlerNsz)AbstractChildWatcher.remove_child_handlercCr&rr'r$rrrr attach_loopVsz AbstractChildWatcher.attach_loopcCr&rr'rrrrr+`szAbstractChildWatcher.closecCr&rr'rrrrrcgszAbstractChildWatcher.is_activecCr&rr'rrrr __enter__pszAbstractChildWatcher.__enter__cCr&rr'r$abcrrr__exit__vszAbstractChildWatcher.__exit__N) rrrrfr+r-r+rcr.r3rrrrr,s   rc@sVeZdZ ddZddZddZddZd d Zd d Zd dZ ddZ ddZ dS)rcCd|_i|_dSrr _callbacksrrrrr" zPidfdChildWatcher.__init__cC|Srrrrrrr.rzPidfdChildWatcher.__enter__cCdSrr)r$exc_type exc_value exc_tracebackrrrr3rzPidfdChildWatcher.__exit__cC|jduo |jSrrZ is_runningrrrrrczPidfdChildWatcher.is_activecCrrr-rrrrr+rzPidfdChildWatcher.closecCsd|jdur|dur|jrtdt|jD]\}}}|j|t|q|j ||_dSNzCA loop is being detached from a child watcher with pending handlers) rr6r0r1RuntimeWarningvaluesrrr+r3)r$rpidfd_rrrr-s    zPidfdChildWatcher.attach_loopcGs\|j|}|dur|d||f|j|<dSt|}|j||j||||f|j|<dSr)r6rNrZ pidfd_openrr_do_wait)r$rvrIrJZexistingrDrrrrfs  z#PidfdChildWatcher.add_child_handlercCs~|j|\}}}|j|z t|d\}}Wnty*d}td|Ynwt |}t ||||g|RdS)NrzJchild process pid %d exit status already read: will report returncode 255) r6poprrrwaitpidChildProcessErrorr rrr+)r$rvrDrIrJrErrwrrrrFs   zPidfdChildWatcher._do_waitcCsFz |j|\}}}Wn tyYdSw|j|t|dS)NFT)r6rHrOrrrr+)r$rvrDrErrrr+s   z&PidfdChildWatcher.remove_child_handlerN) rrrr"r.r3rcr+r-rfrFr+rrrrr{s   rc@sDeZdZddZddZddZddZd d Zd d Zd dZ dS)BaseChildWatchercCr4rr5rrrrr"r7zBaseChildWatcher.__init__cCrrr@rrrrr+rzBaseChildWatcher.closecCr=rr>rrrrrcr?zBaseChildWatcher.is_activecCtrr')r$ expected_pidrrr _do_waitpidrzBaseChildWatcher._do_waitpidcCrLrr'rrrr_do_waitpid_allrz BaseChildWatcher._do_waitpid_allcCsj|jdur|dur|jrtdt|jdur|jtj||_|dur3|tj|j | dSdSrA) rr6r0r1rBr/r?SIGCHLDrM _sig_chldrOr,rrrr-s  zBaseChildWatcher.attach_loopc CsZz|WdSttfyty,}z|jd|dWYd}~dSd}~ww)N$Unknown exception in SIGCHLD handler)rr)rOrhrirjrrrrrrrQszBaseChildWatcher._sig_chldN) rrrr"r+rcrNrOr-rQrrrrrKs rKcsNeZdZ fddZddZddZddZd d Zd d Zd dZ Z S)rcs|jtdSr)r6r3r!r+rr&rrr+ s zSafeChildWatcher.closecCr8rrrrrrr. rzSafeChildWatcher.__enter__cCr9rrr/rrrr3rzSafeChildWatcher.__exit__cGs||f|j|<||dSr)r6rNr)rrrrfsz"SafeChildWatcher.add_child_handlercC$z|j|=WdStyYdSwNTFr6rOr*rrrr+  z%SafeChildWatcher.remove_child_handlercCt|jD]}||qdSrr.r6rNr*rrrrO s z SafeChildWatcher._do_waitpid_allcCsz t|tj\}}Wnty|}d}td|Ynw|dkr%dSt|}|jr5t d||z |j |\}}Wnt yY|jrVtjd|ddYdSYdSw|||g|RdS)NrG8Unknown child process pid %d, will report returncode 255r$process %s exited with returncode %s'Child watcher got an unexpected pid: %rTr) rrIWNOHANGrJr rrrrrr6rHrO)r$rMrvrrwrIrJrrrrN%s6      zSafeChildWatcher._do_waitpid) rrrr+r.r3rfr+rOrNrrrr&rrs rcsReZdZ fddZfddZddZddZd d Zd d Zd dZ Z S)rcs$tt|_i|_d|_dSr)r!r" threadingZLock_lock_zombies_forksrr&rrr"Rs   zFastChildWatcher.__init__cs"|j|jtdSr)r6r3r_r!r+rr&rrr+Xs  zFastChildWatcher.closecCs<|j|jd7_|WdS1swYdS)Nr)r^r`rrrrr.]s$zFastChildWatcher.__enter__cCsv|j(|jd8_|js|js WddSt|j}|jWdn1s.wYtd|dS)Nrz5Caught subprocesses termination from unknown pids: %s)r^r`r_rDr3r r)r$r0r1r2Zcollateral_victimsrrrr3cs    zFastChildWatcher.__exit__c Gs||j(z|j|}Wnty#||f|j|<YWddSwWdn1s.wY|||g|RdSr)r^r_rHrOr6)r$rvrIrJrwrrrrfqs  z"FastChildWatcher.add_child_handlercCrSrTrUr*rrrr+rVz%FastChildWatcher.remove_child_handlerc Cs z tdtj\}}Wn tyYdSw|dkrdSt|}|jFz |j|\}}Wn'tyV|j rR||j |<|j rJt d||YWdqd}Yn w|j rct d||Wdn1smwY|dur~t d||n |||g|Rq)NTr9rz,unknown process %s exited with returncode %srZz8Caught subprocess termination from unknown pid: %d -> %d)rrIr\rJrr^r6rHrOr`r_rrr rr)r$rvrrwrIrJrrrrOsH      z FastChildWatcher._do_waitpid_all) rrrr"r+r.r3rfr+rOrrrr&rrHs rc@sfeZdZ ddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ dS)rcCsi|_d|_dSr)r6_saved_sighandlerrrrrr"r7zMultiLoopChildWatcher.__init__cCs |jduSr)rarrrrrcrzMultiLoopChildWatcher.is_activecCsT|j|jdur dSttj}||jkrtdnttj|jd|_dS)Nz+SIGCHLD handler was changed by outside code) r6r3rar? getsignalrPrQr r)r$rSrrrr+s      zMultiLoopChildWatcher.closecCr8rrrrrrr.rzMultiLoopChildWatcher.__enter__cCr9rrr$r:Zexc_valZexc_tbrrrr3rzMultiLoopChildWatcher.__exit__cGs&t}|||f|j|<||dSr)rget_running_loopr6rN)r$rvrIrJrrrrrfsz'MultiLoopChildWatcher.add_child_handlercCrSrTrUr*rrrr+rVz*MultiLoopChildWatcher.remove_child_handlercCsN|jdurdSttj|j|_|jdurtdtj|_ttjddS)NzaPrevious SIGCHLD handler was set by non-Python code, restore to default handler on watcher close.F)rar?rPrQr rrRrEr,rrrr-s   z!MultiLoopChildWatcher.attach_loopcCrWrrXr*rrrrOs z%MultiLoopChildWatcher._do_waitpid_allc Csz t|tj\}}Wnty |}d}td|d}Yn w|dkr'dSt|}d}z |j|\}}}Wnt yJtjd|ddYdSw| rXtd||dS|re| ret d |||j |||g|RdS) NrGrYFrTr[r%Loop %r that handles pid %r is closedrZ)rrIr\rJr rrr6rHrO is_closedrrrt) r$rMrvrrwZ debug_logrrIrJrrrrNs:     z!MultiLoopChildWatcher._do_waitpidc CsDz|WdSttfyty!tjdddYdSw)NrRTr)rOrhrirjr r)r$rrrrrrQ%s zMultiLoopChildWatcher._sig_chldN)rrrr"rcr+r.r3rfr+r-rOrNrQrrrrrs  %rc@sleZdZ ddZddZddZddZd d Zd d Ze j fd dZ ddZ ddZ ddZddZdS)rcCstd|_i|_dSr) itertoolsr _pid_counter_threadsrrrrr";r(zThreadedChildWatcher.__init__cCrrrrrrrrc?rzThreadedChildWatcher.is_activecCs |dSr) _join_threadsrrrrr+Bs zThreadedChildWatcher.closecCs0 ddt|jD}|D]}|qdS)NcSsg|] }|r|js|qSr)is_alivedaemon.0threadrrr Gs  z6ThreadedChildWatcher._join_threads..)r.rirCr)r$threadsrorrrrjEs  z"ThreadedChildWatcher._join_threadscCr8rrrrrrr.LrzThreadedChildWatcher.__enter__cCr9rrrcrrrr3OrzThreadedChildWatcher.__exit__cCs:ddt|jD}|r||jdt|ddSdS)NcSsg|]}|r|qSr)rkrmrrrrpSs z0ThreadedChildWatcher.__del__..z0 has registered but not finished child processesr))r.rirCr'r2)r$rrqrrrrRs  zThreadedChildWatcher.__del__cGsFt}tj|jdt|j||||fdd}||j|<|dS)Nzwaitpid-T)targetnamerJrl) rrdr]ZThreadrNnextrhristart)r$rvrIrJrrorrrrfZs   z&ThreadedChildWatcher.add_child_handlercCrrrr*rrrr+csz)ThreadedChildWatcher.remove_child_handlercCr9rrr,rrrr-irz ThreadedChildWatcher.attach_loopcCsz t|d\}}Wnty|}d}td|Ynwt|}|r-td|||r9td||n |j |||g|R|j |dS)NrrGrYrZre) rrIrJr rrrrrfrtrirH)r$rrMrIrJrvrrwrrrrNls&  z ThreadedChildWatcher._do_waitpidN)rrrr"rcr+rjr.r3r0r1rrfr+r-rNrrrrr.s   rcsFeZdZ eZfddZddZfddZddZd d Z Z S) _UnixDefaultEventLoopPolicycstd|_dSr)r!r"_watcherrr&rrr"s  z$_UnixDefaultEventLoopPolicy.__init__cCs~tj2|jdur%t|_ttur-|j|jj WddSWddSWddS1s8wYdSr) rr^rwrr]current_thread main_threadr-_localrrrrr _init_watchers "z)_UnixDefaultEventLoopPolicy._init_watchercs@ t||jdurttur|j|dSdSdSr)r!set_event_looprwr]rxryr-r,r&rrr|s  z*_UnixDefaultEventLoopPolicy.set_event_loopcCs |jdur ||jSr)rwr{rrrrrbs z-_UnixDefaultEventLoopPolicy.get_child_watchercCs |jdur |j||_dSr)rwr+)r$rqrrrset_child_watchers   z-_UnixDefaultEventLoopPolicy.set_child_watcher) rrrr Z _loop_factoryr"r{r|rbr}rrrr&rrvs   rv)2rGrrgrrr?rrr r,r]r0rrrrrrr r r r logr __all__r  ImportErrorrrZBaseSelectorEventLoopr Z ReadTransportrXZ_FlowControlMixinZWriteTransportr`ZBaseSubprocessTransportrerrrKrrrrZBaseDefaultEventLoopPolicyrvrrrrrrsd               NON5Ji}Y2