B ӭG4+d@sddlZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z ddl m Z ddl m Z ddl mZddl mZdd l mZdd lmZd ZdZd Zd ZdZdZdZGddde jZGddde jZGdddeZGdddeZGdddeZ Gdddej!Z"Gddde j#Z$Gdd 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)proactor_events)selector_events)tasks) windows_utils)logger)SelectorEventLoopProactorEventLoop IocpProactorDefaultEventLoopPolicyWindowsSelectorEventLoopPolicyWindowsProactorEventLoopPolicyliigMbP?g?csZeZdZddfdd ZfddZddZfd d Zfd d Zfd dZZ S)_OverlappedFutureN)loopcs&tj|d|jr|jd=||_dS)N)r)super__init___source_traceback_ov)selfovr) __class__9/opt/alt/python37/lib/python3.7/asyncio/windows_events.pyr0sz_OverlappedFuture.__init__csHt}|jdk rD|jjr dnd}|dd|d|jjdd|S)NpendingZ completedrz overlapped=)r _repr_inforrinsertaddress)rinfostate)rrrr6s    z_OverlappedFuture._repr_infoc Csr|jdkrdSy|jWnJtk rf}z,d||d}|jrJ|j|d<|j|Wdd}~XYnXd|_dS)Nz&Cancelling an overlapped future failed)message exceptionfuturesource_traceback)rcancelOSErrorr_loopcall_exception_handler)rexccontextrrr_cancel_overlapped=s  z$_OverlappedFuture._cancel_overlappedcs|tS)N)r.rr()r)rrrr(Msz_OverlappedFuture.cancelcst||dS)N)r set_exceptionr.)rr%)rrrr/Qs z_OverlappedFuture.set_exceptioncst|d|_dS)N)r set_resultr)rresult)rrrr0Us z_OverlappedFuture.set_result) __name__ __module__ __qualname__rrr.r(r/r0 __classcell__rr)rrr*s    rcsjeZdZddfdd ZddZfddZd d Zd d Zfd dZfddZ fddZ Z S)_BaseWaitHandleFutureN)rcs8tj|d|jr|jd=||_||_||_d|_dS)N)rrT)rrrr_handle _wait_handle _registered)rrhandle wait_handler)rrrr]sz_BaseWaitHandleFuture.__init__cCst|jdtjkS)Nr)_winapiZWaitForSingleObjectr7Z WAIT_OBJECT_0)rrrr_pollks z_BaseWaitHandleFuture._pollcsdt}|d|jd|jdk rB|r4dnd}|||jdk r`|d|jd|S)Nzhandle=z#xZsignaledZwaitingz wait_handle=)rrappendr7r=r8)rr"r#)rrrrps    z _BaseWaitHandleFuture._repr_infocCs d|_dS)N)r)rfutrrr_unregister_wait_cbzsz)_BaseWaitHandleFuture._unregister_wait_cbc Cs|js dSd|_|j}d|_yt|WnZtk r}z<|jtjkrtd||d}|jrd|j|d<|j |dSWdd}~XYnX| ddS)NFz$Failed to unregister the wait handle)r$r%r&r') r9r8 _overlappedZUnregisterWaitr)winerrorERROR_IO_PENDINGrr*r+r@)rr;r,r-rrr_unregister_waits"   z&_BaseWaitHandleFuture._unregister_waitcs|tS)N)rDrr()r)rrrr(sz_BaseWaitHandleFuture.cancelcs|t|dS)N)rDrr/)rr%)rrrr/sz#_BaseWaitHandleFuture.set_exceptioncs|t|dS)N)rDrr0)rr1)rrrr0sz _BaseWaitHandleFuture.set_result) r2r3r4rr=rr@rDr(r/r0r5rr)rrr6Zs   r6csBeZdZddfdd ZddZfddZfd d ZZS) _WaitCancelFutureN)rcstj||||dd|_dS)N)r)rr_done_callback)rreventr;r)rrrrsz_WaitCancelFuture.__init__cCs tddS)Nz'_WaitCancelFuture must not be cancelled) RuntimeError)rrrrr(sz_WaitCancelFuture.cancelcs$t||jdk r ||dS)N)rr0rF)rr1)rrrr0s  z_WaitCancelFuture.set_resultcs$t||jdk r ||dS)N)rr/rF)rr%)rrrr/s  z_WaitCancelFuture.set_exception)r2r3r4rr(r0r/r5rr)rrrEs rEcs6eZdZddfdd ZfddZddZZS) _WaitHandleFutureN)rcs<tj||||d||_d|_tdddd|_d|_dS)N)rTF)rr _proactorZ_unregister_proactorrAZ CreateEvent_event _event_fut)rrr:r;proactorr)rrrrs z_WaitHandleFuture.__init__csF|jdk r"t|jd|_d|_|j|jd|_t|dS)N) rKr< CloseHandlerLrJ _unregisterrrr@)rr?)rrrr@s   z%_WaitHandleFuture._unregister_wait_cbc Cs|js dSd|_|j}d|_yt||jWnZtk r}z<|jtjkrxd||d}|jrh|j|d<|j |dSWdd}~XYnX|j |j|j |_dS)NFz$Failed to unregister the wait handle)r$r%r&r')r9r8rAZUnregisterWaitExrKr)rBrCrr*r+rJ _wait_cancelr@rL)rr;r,r-rrrrDs$    z"_WaitHandleFuture._unregister_wait)r2r3r4rr@rDr5rr)rrrIs rIc@s8eZdZddZddZddZddZd d ZeZd S) PipeServercCs,||_t|_d|_d|_|d|_dS)NT)_addressweakrefWeakSet_free_instances_pipe_accept_pipe_future_server_pipe_handle)rr!rrrrs  zPipeServer.__init__cCs|j|d}|_|S)NF)rVrX)rtmprrr_get_unconnected_pipesz PipeServer._get_unconnected_pipec Csr|r dStjtjB}|r&|tjO}t|j|tjtjBtj Btj t j t j tj tj}t |}|j||S)N)closedr<ZPIPE_ACCESS_DUPLEXZFILE_FLAG_OVERLAPPEDZFILE_FLAG_FIRST_PIPE_INSTANCEZCreateNamedPiperRZPIPE_TYPE_MESSAGEZPIPE_READMODE_MESSAGEZ PIPE_WAITZPIPE_UNLIMITED_INSTANCESr ZBUFSIZEZNMPWAIT_WAIT_FOREVERNULL PipeHandlerUadd)rfirstflagshpiperrrrXs      zPipeServer._server_pipe_handlecCs |jdkS)N)rR)rrrrr[szPipeServer.closedcCsV|jdk r|jd|_|jdk rRx|jD] }|q,Wd|_d|_|jdS)N)rWr(rRrUcloserVclear)rrbrrrrcs     zPipeServer.closeN) r2r3r4rrZrXr[rc__del__rrrrrQs   rQc@s eZdZdS)_WindowsSelectorEventLoopN)r2r3r4rrrrrf+srfcs8eZdZd fdd ZddZddZd dd ZZS) r Ncs|dkrt}t|dS)N)r rr)rrM)rrrr2szProactorEventLoop.__init__cs8|j|}|IdH}|}|j||d|id}||fS)Naddr)extra)rJ connect_pipe_make_duplex_pipe_transport)rprotocol_factoryr!frbprotocoltransrrrcreate_pipe_connection7s    z(ProactorEventLoop.create_pipe_connectioncs.tdfdd gS)Nc sd}yj|rL|}j|r2|dS}j||did}|dkr`dSj|}Wnt k r}zF|r| dkr d||d|nj rt jd|ddWdd}~XYn2tjk r|r|YnX|_|dS) Nrg)rhrzPipe accept failed)r$r%rbzAccept pipe failed on pipe %rT)exc_info)r1rUdiscardr[rcrjrZrJ accept_piper)filenor+Z_debugr ZwarningrCancelledErrorrWadd_done_callback)rlrbrmr,)r!loop_accept_piperkrserverrrrvBs<   z>ProactorEventLoop.start_serving_pipe..loop_accept_pipe)N)rQZ call_soon)rrkr!r)r!rvrkrrwrstart_serving_pipe?s( z$ProactorEventLoop.start_serving_pipec sl|} t||||||||f| |d| } y| IdHWn,tk rf| | IdHYnX| S)N)waiterrh) create_future_WindowsSubprocessTransport ExceptionrcZ_wait) rrmargsshellstdinstdoutstderrbufsizerhkwargsryZtransprrr_make_subprocess_transportms  z,ProactorEventLoop._make_subprocess_transport)N)N)r2r3r4rrorxrr5rr)rrr /s0r c@seZdZd6ddZddZddZdd Zd7d d Zd dZd8ddZ d9ddZ d:ddZ ddZ ddZ ddZddZddZd;d d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd )lenrrrr>rr2join)rr"rrr__repr__s    zIocpProactor.__repr__cCs ||_dS)N)r*)rrrrrset_loopszIocpProactor.set_loopNcCs |js|||j}g|_|S)N)rr=)rtimeoutrYrrrselects  zIocpProactor.selectcCs|j}|||S)N)r*rzr0)rvaluer?rrr_results  zIocpProactor._resultrcCsz||tt}y4t|tjr6||||n|||Wnt k rb| dSXdd}| |||S)Nc SsPy|Stk rJ}z$|jtjtjfkr8t|jnWdd}~XYnXdS)N) getresultr)rBrAERROR_NETNAME_DELETEDERROR_OPERATION_ABORTEDConnectionResetErrorr})rnkeyrr,rrr finish_recvs  z&IocpProactor.recv..finish_recv) _register_with_iocprA Overlappedr\ isinstancesocketZWSARecvrsZReadFileBrokenPipeErrorr _register)rconnnbytesr`rrrrrrecvs     zIocpProactor.recvcCsz||tt}y4t|tjr6||||n|||Wnt k rb| dSXdd}| |||S)Nrc SsPy|Stk rJ}z$|jtjtjfkr8t|jnWdd}~XYnXdS)N)rr)rBrArrrr})rnrrr,rrrrs  z+IocpProactor.recv_into..finish_recv) rrArr\rrZ WSARecvIntorsZ ReadFileIntorrr)rrbufr`rrrrr recv_intos     zIocpProactor.recv_intocCsZ||tt}t|tjr4||||n|||dd}| |||S)Nc SsPy|Stk rJ}z$|jtjtjfkr8t|jnWdd}~XYnXdS)N)rr)rBrArrrr})rnrrr,rrr finish_sends  z&IocpProactor.send..finish_send) rrArr\rrZWSASendrsZ WriteFiler)rrrr`rrrrrsends    zIocpProactor.sendcsv||jtt}|fdd}dd}|||}||}t j ||j d|S)NcsD|td}tjtj|   fS)Nz@P) rstructpackrs setsockoptr SOL_SOCKETrAZSO_UPDATE_ACCEPT_CONTEXT settimeoutZ gettimeoutZ getpeername)rnrrr)rlistenerrr finish_accepts  z*IocpProactor.accept..finish_acceptcs4y|IdHWn tjk r.|YnXdS)N)rrtrc)r&rrrr accept_coros z(IocpProactor.accept..accept_coro)r) r_get_accept_socketfamilyrArr\ZAcceptExrsrrZ ensure_futurer*)rrrrrr&coror)rrraccepts     zIocpProactor.acceptc s|ytjWnBtk rb}z$|jtjkr@ ddkrRWdd}~XYnXt t }| |fdd}| ||S)Nrrcs|tjtjdS)Nr)rrrrrAZSO_UPDATE_CONNECT_CONTEXT)rnrr)rrrfinish_connects z,IocpProactor.connect..finish_connect)rrAZ BindLocalrsrr)rBerrnoZ WSAEINVALZ getsocknamerr\Z ConnectExr)rrr!errr)rrconnects    zIocpProactor.connectc Csb||tt}|d@}|d?d@}||t||||dddd}||||S)Nl rc SsPy|Stk rJ}z$|jtjtjfkr8t|jnWdd}~XYnXdS)N)rr)rBrArrrr})rnrrr,rrrfinish_sendfile%s  z.IocpProactor.sendfile..finish_sendfile) rrArr\Z TransmitFilersmsvcrtZ get_osfhandler) rZsockfileoffsetcountrZ offset_lowZ offset_highrrrrsendfiles       zIocpProactor.sendfilecsJ|tt}|}|r0|Sfdd}|||S)Ncs |S)N)r)rnrr)rbrrfinish_accept_pipe;sz4IocpProactor.accept_pipe..finish_accept_pipe)rrArr\ZConnectNamedPipersrr)rrbrZ connectedrr)rbrrr0s    zIocpProactor.accept_pipec szt}xjyt|}PWn0tk rF}z|jtjkr6Wdd}~XYnXt|dt}tj ||j dIdHqWt |S)N)r) CONNECT_PIPE_INIT_DELAYrAZ ConnectPiper)rBZERROR_PIPE_BUSYminCONNECT_PIPE_MAX_DELAYrZsleepr*r r])rr!Zdelayr:r,rrrriAs  zIocpProactor.connect_pipecCs|||dS)NF)_wait_for_handle)rr:rrrrwait_for_handleTszIocpProactor.wait_for_handlecCs||dd}||_|S)NT)rrF)rrGZ done_callbackr?rrrrP\szIocpProactor._wait_cancelcs||dkrtj}nt|d}tt}t||j |j |}|r\t ||||j dnt |||||j djr~jd=fdd}|d|f|j|j <S)Ng@@)rrcsS)N)r=)rnrr)rlrrfinish_wait_for_handleysz=IocpProactor._wait_for_handle..finish_wait_for_handler)rr<INFINITEmathceilrArr\ZRegisterWaitWithQueuerr!rEr*rIrr)rr:rZ _is_cancelmsrr;rr)rlrrcs     zIocpProactor._wait_for_handlecCs0||jkr,|j|t||jdddS)Nr)r9r^rArrsr)robjrrrrs  z IocpProactor._register_with_iocpc Cs|t||jd}|jr$|jd=|jsry|dd|}Wn,tk rf}z||Wdd}~XYn X||||||f|j|j <|S)N)rr) rrr*rrr)r/r0rr!)rrrcallbackrlrrrrrrs zIocpProactor._registercCs||j|dS)N)rrr>)rrrrrrOszIocpProactor._unregistercCst|}|d|S)Nr)rr)rrsrrrrs  zIocpProactor._get_accept_socketc Cs|dkrt}n0|dkr tdnt|d}|tkr>tdxt|j|}|dkrZPd}|\}}}}y|j|\}} } } WnVt k r|j r|j dd||||fd|dtj fkrt|wBYnX| |jkr|qB|sBy| ||| } Wn:tk r@} z|| |j|Wdd} ~ XYqBX|| |j|qBWx |jD]} |j| jdqdW|jdS)Nrznegative timeoutg@@ztimeout too bigz8GetQueuedCompletionStatus() returned an unexpected eventz)err=%s transferred=%s key=%#x address=%#x)r$status)r ValueErrorrrrAZGetQueuedCompletionStatusrrpopKeyErrorr*Z get_debugr+rr<rNrr(Zdoner)r/rr>r0rr!rd)rrrrerrZ transferredrr!rlrrrrrrrrr=sJ         zIocpProactor._pollcCs|j|dS)N)rr^)rrrrr _stop_servingszIocpProactor._stop_servingc Cs |jdkrdSxt|jD]\}\}}}}|r8qt|trDqy |Wqtk r}z6|j dk rd||d}|j r|j |d<|j |Wdd}~XYqXqWd}t } | |} xD|jr| t krtd|t | t |} ||qWg|_t|jd|_dS)NzCancelling a future failed)r$r%r&r'g?z,%r is running after closing for %.1f seconds)rlistritemsZ cancelledrrEr(r)r*rr+timeZ monotonicr debugr=rr<rN) rr!r?rrrr,r-Z msg_updateZ start_timeZnext_msgrrrrcs:      "    zIocpProactor.closecCs |dS)N)rc)rrrrre*szIocpProactor.__del__)r)N)r)r)r)N)N)r2r3r4rrrrrrrrrrrrrrrirrPrrrrOrr=rrcrerrrrr s2      "    7/r c@seZdZddZdS)r{c  sPtj|f|||||d|_fdd}jjtjj} | |dS)N)r~rrrrcsj}|dS)N)_procZpollZ_process_exited)rl returncode)rrrr5s z4_WindowsSubprocessTransport._start..callback) r Popenrr*rJrintr7ru) rr}r~rrrrrrrlr)rr_start0s   z"_WindowsSubprocessTransport._startN)r2r3r4rrrrrr{.sr{c@seZdZeZdS)rN)r2r3r4r _loop_factoryrrrrr@src@seZdZeZdS)rN)r2r3r4r rrrrrrDsr)-rAr<rrrrrrrSrrrrrrr logr __all__r\rZERROR_CONNECTION_REFUSEDZERROR_CONNECTION_ABORTEDrrZFuturerr6rErIobjectrQZBaseSelectorEventLooprfZBaseProactorEventLoopr r ZBaseSubprocessTransportr{r ZBaseDefaultEventLoopPolicyrrrrrrrsN        0J4;P2