U e5di€ã@s˜ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z ddl m Z ddl m Z ddl mZddl mZdd l mZdd l mZdd lmZd ZdZd ZdZdZdZdZGdd„de jƒZGdd„de jƒZGdd„deƒZGdd„deƒZGdd„de ƒZ!Gdd„dej"ƒZ#Gdd„dej$ƒZ%Gd d!„d!ƒZ&Gd"d#„d#e j'ƒZ(e#Z)Gd$d%„d%e j*ƒZ+Gd&d'„d'e j*ƒZ,e,Z-dS)(éNé)Úevents)Úbase_subprocess)Úfutures)Ú exceptions)Úproactor_events)Úselector_events)Útasks)Ú windows_utils)Úlogger)ÚSelectorEventLoopÚProactorEventLoopÚ IocpProactorÚDefaultEventLoopPolicyÚWindowsSelectorEventLoopPolicyÚWindowsProactorEventLoopPolicyìÿÿiÉiÔgü©ñÒMbP?gš™™™™™¹?csZeZdZddœ‡fdd„ Z‡fdd„Zdd„Z‡fd d „Z‡fd d „Z‡fd d„Z‡Z S)Ú_OverlappedFutureN©Úloopcs&tƒj|d�|jr|jd=||_dS©Nréÿÿÿÿ)ÚsuperÚ__init__Ú_source_tracebackÚ_ov)ÚselfÚovr©Ú __class__©ú./usr/lib64/python3.8/asyncio/windows_events.pyr1sz_OverlappedFuture.__init__csHtƒ ¡}|jdk rD|jjr dnd}| dd|›d|jjd›d�¡|S)NÚpendingZ completedrz overlapped=)rÚ _repr_inforr"ÚinsertÚaddress©rÚinfoÚstaterr r!r%7s    z_OverlappedFuture._repr_infoc Csr|jdkrdSz|j ¡WnJtk rf}z,d||dœ}|jrJ|j|d<|j |¡W5d}~XYnXd|_dS)Nz&Cancelling an overlapped future failed©ÚmessageÚ exceptionÚfutureÚsource_traceback)rÚcancelÚOSErrorrÚ_loopÚcall_exception_handler)rÚexcÚcontextr r r!Ú_cancel_overlapped>s ý z$_OverlappedFuture._cancel_overlappedcs| ¡tƒ ¡S©N)r6rr0©rrr r!r0Nsz_OverlappedFuture.cancelcstƒ |¡| ¡dSr7)rÚ set_exceptionr6©rr-rr r!r9Rs z_OverlappedFuture.set_exceptioncstƒ |¡d|_dSr7)rÚ set_resultr©rÚresultrr r!r;Vs z_OverlappedFuture.set_result) Ú__name__Ú __module__Ú __qualname__rr%r6r0r9r;Ú __classcell__r r rr!r+s    rcsjeZdZddœ‡fdd„ Zdd„Z‡fdd„Zd d „Zd d „Z‡fd d„Z‡fdd„Z ‡fdd„Z ‡Z S)Ú_BaseWaitHandleFutureNrcs8tƒj|d�|jr|jd=||_||_||_d|_dS)NrrT)rrrrÚ_handleÚ _wait_handleÚ _registered)rrÚhandleÚ wait_handlerrr r!r^sz_BaseWaitHandleFuture.__init__cCst |jd¡tjkS©Nr)Ú_winapiZWaitForSingleObjectrCZ WAIT_OBJECT_0r8r r r!Ú_pollls ÿz_BaseWaitHandleFuture._pollcsdtƒ ¡}| d|jd›�¡|jdk rB| ¡r4dnd}| |¡|jdk r`| d|jd›�¡|S)Nzhandle=r#ZsignaledZwaitingz wait_handle=)rr%ÚappendrCrJrDr(rr r!r%qs    z _BaseWaitHandleFuture._repr_infocCs d|_dSr7)r©rÚfutr r r!Ú_unregister_wait_cb{sz)_BaseWaitHandleFuture._unregister_wait_cbc Csš|js dSd|_|j}d|_zt |¡Wn`tk rŠ}zB|jtjkrzd||dœ}|jrd|j|d<|j  |¡WY¢dSW5d}~XYnX|  d¡dS©NFz$Failed to unregister the wait handler+r/) rErDÚ _overlappedZUnregisterWaitr1ÚwinerrorÚERROR_IO_PENDINGrr2r3rN©rrGr4r5r r r!Ú_unregister_wait€s$ ý  z&_BaseWaitHandleFuture._unregister_waitcs| ¡tƒ ¡Sr7)rTrr0r8rr r!r0˜sz_BaseWaitHandleFuture.cancelcs| ¡tƒ |¡dSr7)rTrr9r:rr r!r9œsz#_BaseWaitHandleFuture.set_exceptioncs| ¡tƒ |¡dSr7)rTrr;r<rr r!r; sz _BaseWaitHandleFuture.set_result) r>r?r@rrJr%rNrTr0r9r;rAr r rr!rB[s   rBcsBeZdZddœ‡fdd„ Zdd„Z‡fdd„Z‡fd d „Z‡ZS) Ú_WaitCancelFutureNrcstƒj||||d�d|_dS)Nr)rrÚ_done_callback)rrÚeventrGrrr r!rªsz_WaitCancelFuture.__init__cCs tdƒ‚dS)Nz'_WaitCancelFuture must not be cancelled)Ú RuntimeErrorr8r r r!r0¯sz_WaitCancelFuture.cancelcs$tƒ |¡|jdk r | |¡dSr7)rr;rVr<rr r!r;²s  z_WaitCancelFuture.set_resultcs$tƒ |¡|jdk r | |¡dSr7)rr9rVr:rr r!r9·s  z_WaitCancelFuture.set_exception)r>r?r@rr0r;r9rAr r rr!rU¥s rUcs6eZdZddœ‡fdd„ Z‡fdd„Zdd„Z‡ZS) Ú_WaitHandleFutureNrcs<tƒj||||d�||_d|_t dddd¡|_d|_dS)NrTF)rrÚ _proactorZ_unregister_proactorrPZ CreateEventÚ_eventÚ _event_fut)rrrFrGÚproactorrrr r!r¾s z_WaitHandleFuture.__init__csF|jdk r"t |j¡d|_d|_|j |j¡d|_tƒ |¡dSr7) r[rIÚ CloseHandler\rZÚ _unregisterrrrNrLrr r!rNÅs   z%_WaitHandleFuture._unregister_wait_cbc Cs¨|js dSd|_|j}d|_zt ||j¡Wn`tk rŽ}zB|jtjkr~d||dœ}|jrh|j|d<|j   |¡WY¢dSW5d}~XYnX|j   |j|j ¡|_dSrO)rErDrPZUnregisterWaitExr[r1rQrRrr2r3rZÚ _wait_cancelrNr\rSr r r!rT×s( ý   ÿz"_WaitHandleFuture._unregister_wait)r>r?r@rrNrTrAr r rr!rY½s rYc@s8eZdZdd„Zdd„Zdd„Zdd„Zd d „ZeZd S) Ú PipeServercCs,||_t ¡|_d|_d|_| d¡|_dS©NT)Ú_addressÚweakrefÚWeakSetÚ_free_instancesÚ_pipeÚ_accept_pipe_futureÚ_server_pipe_handle)rr'r r r!rös  zPipeServer.__init__cCs|j| d¡}|_|S©NF)rgri)rÚtmpr r r!Ú_get_unconnected_pipesz PipeServer._get_unconnected_pipec Csr| ¡r dStjtjB}|r&|tjO}t |j|tjtjBtj Btj t j t j tj tj¡}t  |¡}|j |¡|Sr7)ÚclosedrIZPIPE_ACCESS_DUPLEXZFILE_FLAG_OVERLAPPEDZFILE_FLAG_FIRST_PIPE_INSTANCEZCreateNamedPipercZPIPE_TYPE_MESSAGEZPIPE_READMODE_MESSAGEZ PIPE_WAITZPIPE_UNLIMITED_INSTANCESr ZBUFSIZEZNMPWAIT_WAIT_FOREVERÚNULLÚ PipeHandlerfÚadd)rÚfirstÚflagsÚhÚpiper r r!ris(   ÿú  zPipeServer._server_pipe_handlecCs |jdkSr7)rcr8r r r!rmszPipeServer.closedcCsR|jdk r|j ¡d|_|jdk rN|jD] }| ¡q*d|_d|_|j ¡dSr7)rhr0rcrfÚclosergÚclear)rrtr r r!rus     zPipeServer.closeN) r>r?r@rrlrirmruÚ__del__r r r r!rañs   rac@s eZdZdS)Ú_WindowsSelectorEventLoopN)r>r?r@r r r r!rx,srxcsDeZdZd ‡fdd„ Z‡fdd„Zdd„Zdd „Zd d d „Z‡ZS)r Ncs|dkrtƒ}tƒ |¡dSr7)rrr)rr]rr r!r3szProactorEventLoop.__init__c sXz| |j¡tƒ ¡W5|jdk rR|jj}|j ¡|dk rL|j |¡d|_XdSr7) Z_self_reading_futurerr0rZr_Ú call_soonZ_loop_self_readingrÚ run_forever©rrrr r!rz8s    zProactorEventLoop.run_forevercÃs8|j |¡}|IdH}|ƒ}|j||d|id�}||fS)NÚaddr©Úextra)rZÚ connect_pipeÚ_make_duplex_pipe_transport)rÚprotocol_factoryr'ÚfrtÚprotocolÚtransr r r!Úcreate_pipe_connectionKs  ÿz(ProactorEventLoop.create_pipe_connectioncƒs.tˆƒ‰d‡‡‡‡‡fdd„ ‰ˆ ˆ¡ˆgS)Nc s d}zn|rN| ¡}ˆj |¡ˆ ¡r4| ¡WdSˆƒ}ˆj||dˆid�ˆ ¡}|dkrdWdSˆj |¡}Wn„t k rÖ}zF|r°|  ¡dkr°ˆ  d||dœ¡| ¡nˆj rÆt jd|dd�W5d}~XYn2tjk rö|rò| ¡YnX|ˆ_| ˆ¡dS) Nr|r}rzPipe accept failed)r,r-rtzAccept pipe failed on pipe %rT)Úexc_info)r=rfÚdiscardrmrur€rlrZÚ accept_piper1Úfilenor3Z_debugr ZwarningrÚCancelledErrorrhÚadd_done_callback)r‚rtrƒr4©r'Úloop_accept_piper�rZserverr r!r�VsH ÿý ÿz>ProactorEventLoop.start_serving_pipe..loop_accept_pipe)N)rary)rr�r'r rŒr!Ústart_serving_pipeSs( z$ProactorEventLoop.start_serving_pipec Ës„| ¡} t||||||||f| |dœ| —Ž} z| IdHWnDttfk rT‚Yn,tk r~|  ¡|  ¡IdH‚YnX| S)N)Úwaiterr~)Ú create_futureÚ_WindowsSubprocessTransportÚ SystemExitÚKeyboardInterruptÚ BaseExceptionruZ_wait) rrƒÚargsÚshellÚstdinÚstdoutÚstderrÚbufsizer~Úkwargsr�Ztranspr r r!Ú_make_subprocess_transport�s* ÿþýz,ProactorEventLoop._make_subprocess_transport)N)N) r>r?r@rrzr…rŽrœrAr r rr!r 0s  0þr c@söeZdZd:dd„Zdd„Zdd„Zdd „Zd;d d „Zd d„Zddd„Z d?dd„Z d@dd„Z dd„Zdd„Zdd„Zd d!„Zd"d#„ZdAd$d%„Zd&d'„Zd(d)„Zd*d+„Zd,d-„Zd.d/„Zd0d1„ZdBd2d3„Zd4d5„Zd6d7„Zd8d9„Zd S)CrrcCsDd|_g|_t tjtd|¡|_i|_t  ¡|_ g|_ t  ¡|_ dSrH) r2Ú_resultsrPÚCreateIoCompletionPortÚINVALID_HANDLE_VALUErnÚ_iocpÚ_cacherdrerEÚ _unregisteredÚ_stopped_serving)rZ concurrencyr r r!r˜sÿ zIocpProactor.__init__cCs|jdkrtdƒ‚dS)NzIocpProactor is closed)r rXr8r r r!Ú _check_closed¢s zIocpProactor._check_closedcCsFdt|jƒdt|jƒg}|jdkr0| d¡d|jjd |¡fS)Nzoverlapped#=%sz result#=%srmz<%s %s>ú )Úlenr¡r�r rKrr>Újoin)rr)r r r!Ú__repr__¦s   ÿ  zIocpProactor.__repr__cCs ||_dSr7)r2)rrr r r!Úset_loop­szIocpProactor.set_loopNcCs |js| |¡|j}g|_|Sr7)r�rJ)rÚtimeoutrkr r r!Úselect°s  zIocpProactor.selectcCs|j ¡}| |¡|Sr7)r2r�r;)rÚvaluerMr r r!Ú_result·s  zIocpProactor._resultrcCs~| |¡t t¡}z4t|tjƒr6| | ¡||¡n| | ¡|¡Wnt k rf|  d¡YSXdd„}|  |||¡S)Nóc SsRz | ¡WStk rL}z$|jtjtjfkr:t|jŽ‚n‚W5d}~XYnXdSr7©Ú getresultr1rQrPZERROR_NETNAME_DELETEDZERROR_OPERATION_ABORTEDÚConnectionResetErrorr•©r„Úkeyrr4r r r!Ú finish_recvÇs ÿ z&IocpProactor.recv..finish_recv) Ú_register_with_iocprPÚ OverlappedrnÚ isinstanceÚsocketZWSARecvr‰ZReadFileÚBrokenPipeErrorr­Ú _register©rÚconnÚnbytesrrrr´r r r!Úrecv¼s    zIocpProactor.recvcCs~| |¡t t¡}z4t|tjƒr6| | ¡||¡n| | ¡|¡Wnt k rf|  d¡YSXdd„}|  |||¡S)Nrc SsRz | ¡WStk rL}z$|jtjtjfkr:t|jŽ‚n‚W5d}~XYnXdSr7r¯r²r r r!r´Þs ÿ z+IocpProactor.recv_into..finish_recv) rµrPr¶rnr·r¸Z WSARecvIntor‰Z ReadFileIntor¹r­rº)rr¼Úbufrrrr´r r r!Ú recv_intoÓs    zIocpProactor.recv_intocCs`| |¡t t¡}z| | ¡||¡Wntk rH| d¡YSXdd„}| |||¡S)N)r®Nc SsRz | ¡WStk rL}z$|jtjtjfkr:t|jŽ‚n‚W5d}~XYnXdSr7r¯r²r r r!r´òs ÿ z*IocpProactor.recvfrom..finish_recv) rµrPr¶rnZ WSARecvFromr‰r¹r­rºr»r r r!Úrecvfromês   zIocpProactor.recvfromcCs>| |¡t t¡}| | ¡|||¡dd„}| |||¡S)Nc SsRz | ¡WStk rL}z$|jtjtjfkr:t|jŽ‚n‚W5d}~XYnXdSr7r¯r²r r r!Ú finish_sends ÿ z(IocpProactor.sendto..finish_send)rµrPr¶rnZ WSASendTor‰rº)rr¼r¿rrr|rrÂr r r!Úsendtoþs    zIocpProactor.sendtocCsZ| |¡t t¡}t|tjƒr4| | ¡||¡n| | ¡|¡dd„}|  |||¡S)Nc SsRz | ¡WStk rL}z$|jtjtjfkr:t|jŽ‚n‚W5d}~XYnXdSr7r¯r²r r r!rÂs ÿ z&IocpProactor.send..finish_send) rµrPr¶rnr·r¸ZWSASendr‰Z WriteFilerº)rr¼r¿rrrrÂr r r!Úsends    zIocpProactor.sendcsv| ˆ¡| ˆj¡‰t t¡}| ˆ ¡ˆ ¡¡‡‡fdd„}dd„}| |ˆ|¡}||ˆƒ}t j ||j d�|S)NcsD| ¡t dˆ ¡¡}ˆ tjtj|¡ˆ  ˆ  ¡¡ˆˆ  ¡fS)Nz@P) r°ÚstructZpackr‰Ú setsockoptr¸Ú SOL_SOCKETrPZSO_UPDATE_ACCEPT_CONTEXTÚ settimeoutZ gettimeoutZ getpeername)r„r³rr¿©r¼Úlistenerr r!Ú finish_accept*sÿz*IocpProactor.accept..finish_acceptcÓs4z|IdHWn tjk r.| ¡‚YnXdSr7)rrŠru)r.r¼r r r!Ú accept_coro3s z(IocpProactor.accept..accept_coror) rµÚ_get_accept_socketÚfamilyrPr¶rnZAcceptExr‰rºr Z ensure_futurer2)rrÊrrËrÌr.Úcoror rÉr!Úaccept$s     zIocpProactor.acceptc s̈jtjkr4t ˆ ¡|¡|j ¡}| d¡|S|  ˆ¡zt  ˆ ¡ˆj ¡WnBt k r–}z$|j tjkrt‚ˆ ¡ddkr†‚W5d}~XYnXt t¡}| ˆ ¡|¡‡fdd„}| |ˆ|¡S)Nrrcs| ¡ˆ tjtjd¡ˆSrH)r°rÆr¸rÇrPZSO_UPDATE_CONNECT_CONTEXT©r„r³r©r¼r r!Úfinish_connectVs ÿz,IocpProactor.connect..finish_connect)Útyper¸Z SOCK_DGRAMrPZ WSAConnectr‰r2r�r;rµZ BindLocalrÎr1rQÚerrnoZ WSAEINVALZ getsocknamer¶rnZ ConnectExrº)rr¼r'rMÚerrÓr rÒr!Úconnect@s"       zIocpProactor.connectc Csb| |¡t t¡}|d@}|d?d@}| | ¡t | ¡¡|||dd¡dd„}| |||¡S)Nré rc SsRz | ¡WStk rL}z$|jtjtjfkr:t|jŽ‚n‚W5d}~XYnXdSr7r¯r²r r r!Úfinish_sendfileis ÿ z.IocpProactor.sendfile..finish_sendfile) rµrPr¶rnZ TransmitFiler‰ÚmsvcrtZ get_osfhandlerº) rZsockÚfileÚoffsetÚcountrZ offset_lowZ offset_highrÙr r r!Úsendfile_s     ý zIocpProactor.sendfilecsJ| ˆ¡t t¡}| ˆ ¡¡}|r0| ˆ¡S‡fdd„}| |ˆ|¡S)Ncs | ¡ˆSr7)r°rÑ©rtr r!Úfinish_accept_pipesz4IocpProactor.accept_pipe..finish_accept_pipe)rµrPr¶rnZConnectNamedPiper‰r­rº)rrtrZ connectedràr rßr!rˆts    zIocpProactor.accept_pipec Ãsrt}zt |¡}WqhWn0tk rF}z|jtjkr6‚W5d}~XYnXt|dtƒ}t  |¡IdHqt   |¡S)Né) ÚCONNECT_PIPE_INIT_DELAYrPZ ConnectPiper1rQZERROR_PIPE_BUSYÚminÚCONNECT_PIPE_MAX_DELAYr Úsleepr ro)rr'ZdelayrFr4r r r!r…s  zIocpProactor.connect_pipecCs| ||d¡Srj)Ú_wait_for_handle)rrFrªr r r!Úwait_for_handle˜szIocpProactor.wait_for_handlecCs| |dd¡}||_|Srb)rærV)rrWZ done_callbackrMr r r!r` szIocpProactor._wait_cancelcs¢| ¡|dkrtj}nt |d¡}t t¡}t ||j |j |¡}|r\t ||||j d�‰nt |||||j d�‰ˆjr~ˆjd=‡fdd„}ˆ|d|f|j|j <ˆS)Nç@�@rrcsˆ ¡Sr7)rJrÑ©r‚r r!Úfinish_wait_for_handle½sz=IocpProactor._wait_for_handle..finish_wait_for_handler)r¤rIÚINFINITEÚmathÚceilrPr¶rnZRegisterWaitWithQueuer r'rUr2rYrr¡)rrFrªZ _is_cancelÚmsrrGrêr rér!ræ§s* ÿ ÿ zIocpProactor._wait_for_handlecCs0||jkr,|j |¡t | ¡|jdd¡dSrH)rErprPržr‰r ©rÚobjr r r!rµÉs  z IocpProactor._register_with_iocpc CsŠ| ¡t||jd�}|jr$|jd=|jsrz|dd|ƒ}Wn,tk rf}z| |¡W5d}~XYn X| |¡||||f|j|j <|Sr) r¤rr2rr"r1r9r;r¡r')rrrðÚcallbackr‚r¬rÖr r r!rºÓs zIocpProactor._registercCs| ¡|j |¡dSr7)r¤r¢rKr{r r r!r_ószIocpProactor._unregistercCst |¡}| d¡|SrH)r¸rÈ)rrÎÚsr r r!rÍýs  zIocpProactor._get_accept_socketc Cs†|dkrt}n0|dkr tdƒ‚nt |d¡}|tkr>tdƒ‚t |j|¡}|dkrX�qZd}|\}}}}z|j |¡\}} } } WnXt k rØ|j   ¡r¸|j   dd||||fdœ¡|dtj fkrÐt |¡Yq>YnX| |jkrî| ¡q>| ¡s>z| ||| ƒ} Wn:tk �r@} z| | ¡|j |¡W5d} ~ XYq>X| | ¡|j |¡q>|jD]} |j | jd¡�q`|j ¡dS)Nrznegative timeoutrèztimeout too bigz8GetQueuedCompletionStatus() returned an unexpected eventz)err=%s transferred=%s key=%#x address=%#x)r,Ústatus)rëÚ ValueErrorrìrírPZGetQueuedCompletionStatusr r¡ÚpopÚKeyErrorr2Z get_debugr3rŸrIr^r£r0Zdoner1r9r�rKr;r¢r'rv)rrªrîróÚerrZ transferredr³r'r‚rrðrñr¬rÖr r r!rJsL    ÿý        zIocpProactor._pollcCs|j |¡dSr7)r£rprïr r r!Ú _stop_serving9szIocpProactor._stop_servingc Cs|jdkrdSt|j ¡ƒD]ˆ\}\}}}}| ¡r6qt|tƒrBqz | ¡Wqtk r¢}z6|j dk r’d||dœ}|j r†|j |d<|j   |¡W5d}~XYqXqd}t   ¡} | |} |jrú| t   ¡krît d|t   ¡| ¡t   ¡|} | |¡qºg|_t |j¡d|_dS)NzCancelling a future failedr+r/gð?z,%r is running after closing for %.1f seconds)r Úlistr¡ÚitemsZ cancelledr·rUr0r1r2rr3ÚtimeÚ monotonicr ÚdebugrJr�rIr^) rr'rMrrðrñr4r5Z msg_updateZ start_timeZnext_msgr r r!ru?s@    ý    ÿ   zIocpProactor.closecCs | ¡dSr7)rur8r r r!rwnszIocpProactor.__del__)r)N)r)r)r)rN)r)N)N)r>r?r@rr¤r¨r©r«r­r¾rÀrÁrÃrÄrÐr×rÞrˆrrçr`rærµrºr_rÍrJrørurwr r r r!r•s6        "    7/rc@seZdZdd„ZdS)r‘c  sPtj|f|||||dœ|—Žˆ_‡fdd„}ˆjj tˆjjƒ¡} |  |¡dS)N)r–r—r˜r™ršcsˆj ¡}ˆ |¡dSr7)Ú_procZpollZ_process_exited)r‚Ú returncoder8r r!rñys z4_WindowsSubprocessTransport._start..callback) r ÚPopenrþr2rZrçÚintrCr‹) rr•r–r—r˜r™ršr›rñr‚r r8r!Ú_starttsÿþþ z"_WindowsSubprocessTransport._startN)r>r?r@rr r r r!r‘rsr‘c@seZdZeZdS)rN)r>r?r@r Ú _loop_factoryr r r r!r„src@seZdZeZdS)rN)r>r?r@r rr r r r!rˆsr).rPrIrÕrìrÚr¸rÅrûrdÚrrrrrrr r Úlogr Ú__all__rnrëZERROR_CONNECTION_REFUSEDZERROR_CONNECTION_ABORTEDrâräZFuturerrBrUrYÚobjectraZBaseSelectorEventLooprxZBaseProactorEventLoopr rZBaseSubprocessTransportr‘r ZBaseDefaultEventLoopPolicyrrrr r r r!ÚsP         0J4;e`