PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB`  oY.l@sdZddlZddlZddlZddlZddlZddlZddlmZddlm Z ddlm Z ddlm Z ddlm Z dd lm Z dd lmZdd lmZdd lmZdd lmZddddgZdZdZdZdZdZdZGddde jZGddde jZGdddeZGdddeZGdd d e Z!Gd!d"d"e j"Z#Gd#dde j$Z%Gd$ddZ&Gd%d&d&e j'Z(e#Z)Gd'd(d(ej*Z+e+Z,dS))z.Selector and proactor event loops for Windows.N)events)base_subprocess)futures)proactor_events)selector_events)tasks) windows_utils) _overlapped) coroutine)loggerSelectorEventLoopProactorEventLoop IocpProactorDefaultEventLoopPolicyliigMbP?g?cseZdZdZddfddZfddZdd Zfd d Zfd d ZfddZ S)_OverlappedFuturezSubclass of Future which represents an overlapped operation. Cancelling it will immediately cancel the overlapped operation. loopNcs3tjd||jr&|jd=||_dS)Nrr)super__init___source_traceback_ov)selfovr) __class__-/opt/python35/lib/python3.5/windows_events.pyr-s  z_OverlappedFuture.__init__csZtj}|jdk rV|jjr0dnd}|jdd||jjf|S)NpendingZ completedrzoverlapped=<%s, %#x>)r _repr_inforrinsertaddress)rinfostate)rrrr3s  z_OverlappedFuture._repr_infocCs|jdkrdSy|jjWnctk r}zCddd|d|i}|jrg|j|d<|jj|WYdd}~XnXd|_dS)Nmessagez&Cancelling an overlapped future failed exceptionfuturesource_traceback)rcancelOSErrorr_loopcall_exception_handler)rexccontextrrr_cancel_overlapped:s   #z$_OverlappedFuture._cancel_overlappedcs|jtjS)N)r-rr')r)rrrr'Js z_OverlappedFuture.cancelcstj||jdS)N)r set_exceptionr-)rr$)rrrr.Nsz_OverlappedFuture.set_exceptioncstj|d|_dS)N)r set_resultr)rresult)rrrr/Rsz_OverlappedFuture.set_result) __name__ __module__ __qualname____doc__rrr-r'r.r/rr)rrr's  rcseZdZdZddfddZddZfdd Zd d Zd d ZfddZ fddZ fddZ S)_BaseWaitHandleFuturez2Subclass of Future which represents a wait handle.rNcsNtjd||jr&|jd=||_||_||_d|_dS)NrrTr)rrrr_handle _wait_handle _registered)rrhandle wait_handler)rrrrZs     z_BaseWaitHandleFuture.__init__cCstj|jdtjkS)Nr)_winapiZWaitForSingleObjectr6Z WAIT_OBJECT_0)rrrr_pollhsz_BaseWaitHandleFuture._pollcs~tj}|jd|j|jdk rW|jrDdnd}|j||jdk rz|jd|j|S)Nz handle=%#xsignaledZwaitingzwait_handle=%#x)rrappendr6r<r7)rr!r")rrrrms z _BaseWaitHandleFuture._repr_infocCs d|_dS)N)r)rfutrrr_unregister_wait_cbwsz)_BaseWaitHandleFuture._unregister_wait_cbcCs|js dSd|_|j}d|_ytj|Wnytk r}zY|jtjkrddd|d|i}|jr|j|d<|jj |dSWYdd}~XnX|j ddS)NFr#z$Failed to unregister the wait handler$r%r&) r8r7r ZUnregisterWaitr(winerrorERROR_IO_PENDINGrr)r*r@)rr:r+r,rrr_unregister_wait|s"       z&_BaseWaitHandleFuture._unregister_waitcs|jtjS)N)rCrr')r)rrrr's z_BaseWaitHandleFuture.cancelcs|jtj|dS)N)rCrr.)rr$)rrrr.s z#_BaseWaitHandleFuture.set_exceptioncs|jtj|dS)N)rCrr/)rr0)rrrr/s z _BaseWaitHandleFuture.set_result) r1r2r3r4rr<rr@rCr'r.r/rr)rrr5Ws    r5csLeZdZdZddfddZddZfdd ZS) _WaitCancelFuturezoSubclass of Future which represents a wait for the cancellation of a _WaitHandleFuture using an event. rNcs)tj|||d|d|_dS)Nr)rr_done_callback)rreventr:r)rrrrsz_WaitCancelFuture.__init__cCstddS)Nz'_WaitCancelFuture must not be cancelled) RuntimeError)rrrrr'sz_WaitCancelFuture.cancelcs3tt|j|jdk r/|j|dS)N)rrD_schedule_callbacksrE)r)rrrrHsz%_WaitCancelFuture._schedule_callbacks)r1r2r3r4rr'rHrr)rrrDs  rDcsFeZdZddfddZfddZddZS) _WaitHandleFuturerNcsVtj|||d|||_d|_tjdddd|_d|_dS)NrTF)rr _proactorZ_unregister_proactorr Z CreateEvent_event _event_fut)rrr9r:proactorr)rrrrs   z_WaitHandleFuture.__init__csa|jdk r1tj|jd|_d|_|jj|jd|_tj|dS)N) rKr; CloseHandlerLrJ _unregisterrrr@)rr?)rrrr@s   z%_WaitHandleFuture._unregister_wait_cbcCs|js dSd|_|j}d|_ytj||jWnytk r}zY|jtjkrddd|d|i}|jr|j|d<|j j |dSWYdd}~XnX|j j |j|j |_dS)NFr#z$Failed to unregister the wait handler$r%r&)r8r7r ZUnregisterWaitExrKr(rArBrr)r*rJ _wait_cancelr@rL)rr:r+r,rrrrCs$       z"_WaitHandleFuture._unregister_wait)r1r2r3rr@rCrr)rrrIs rIc@sXeZdZdZddZddZddZdd Zd d ZeZ d S) PipeServerzXClass representing a pipe server. This is much like a bound, listening socket. cCs@||_tj|_d|_d|_|jd|_dS)NT)_addressweakrefWeakSet_free_instances_pipe_accept_pipe_future_server_pipe_handle)rr rrrrs    zPipeServer.__init__cCs |j|jd}|_|S)NF)rVrX)rtmprrr_get_unconnected_pipesz PipeServer._get_unconnected_pipec Cs|jrdStjtjB}|r3|tjO}tj|j|tjtjBtj Btj t j t j tj tj}t j|}|jj||S)N)closedr;ZPIPE_ACCESS_DUPLEXZFILE_FLAG_OVERLAPPEDZFILE_FLAG_FIRST_PIPE_INSTANCEZCreateNamedPiperRZPIPE_TYPE_MESSAGEZPIPE_READMODE_MESSAGEZ PIPE_WAITZPIPE_UNLIMITED_INSTANCESr BUFSIZEZNMPWAIT_WAIT_FOREVERNULL PipeHandlerUadd)rfirstflagshpiperrrrXs     zPipeServer._server_pipe_handlecCs |jdkS)N)rR)rrrrr[szPipeServer.closedcCsu|jdk r%|jjd|_|jdk rqx|jD]}|jq>Wd|_d|_|jjdS)N)rWr'rRrUcloserVclear)rrcrrrrds    zPipeServer.closeN) r1r2r3r4rrZrXr[rd__del__rrrrrQs     rQc@s"eZdZdZddZdS)_WindowsSelectorEventLoopz'Windows version of selector event loop.cCs tjS)N)r socketpair)rrrr _socketpair&sz%_WindowsSelectorEventLoop._socketpairN)r1r2r3r4rirrrrrg#s rgcspeZdZdZdfddZddZeddZed d Zedd d Z S) rz2Windows version of proactor event loop using IOCP.Ncs)|dkrt}tj|dS)N)rrr)rrM)rrrr-s  zProactorEventLoop.__init__cCs tjS)N)r rh)rrrrri2szProactorEventLoop._socketpairccsN|jj|}|EdH}|}|j||dd|i}||fS)Nextraaddr)rJ connect_pipe_make_duplex_pipe_transport)rprotocol_factoryr frcprotocoltransrrrcreate_pipe_connection5s   z(ProactorEventLoop.create_pipe_connectioncsAtdfddjgS)Ncsbd}y|rj|j}jj|jrE|jdS}j||ddij}|dkrdSjj|}Wnt k r#}zh|r|j d krj ddd|d|i|jnj rt jd|d d WYdd}~Xn;tjk rG|rC|jYnX|_|jdS) Nrjrkrr#zPipe accept failedr$rczAccept pipe failed on pipe %rexc_infoTr)r0rUdiscardr[rdrmrZrJ accept_piper(filenor*Z_debugr warningrCancelledErrorrWadd_done_callback)rorcrpr+)r loop_accept_pipernrserverrrrzBs<           z>ProactorEventLoop.start_serving_pipe..loop_accept_pipe)rQZ call_soon)rrnr r)r rzrnrr{rstart_serving_pipe>s !( z$ProactorEventLoop.start_serving_pipec ks|j} t||||||||d| d|| } y | EdHWn+tk rv} z | } WYdd} ~ XnXd} | dk r| j| jEdH| | S)Nwaiterrj) create_future_WindowsSubprocessTransport Exceptionrd_wait)rrpargsshellstdinstdoutstderrbufsizerjkwargsr}Ztranspr+errrrr_make_subprocess_transportms      z,ProactorEventLoop._make_subprocess_transport) r1r2r3r4rrir rrr|rrr)rrr*s   /c@s6eZdZdZdddZddZddZd d d Zd d ZdddZ dddZ ddZ ddZ ddZ eddZd ddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd d)d*Zd+d,Zd-d.Zd/d0Zd S)1rz#Proactor implementation using IOCP.lcCsdd|_g|_tjtjtd||_i|_tj |_ g|_ tj |_ dS)Nr) r)_resultsr CreateIoCompletionPortINVALID_HANDLE_VALUEr]_iocp_cacherSrTr8 _unregistered_stopped_serving)rZ concurrencyrrrrs    zIocpProactor.__init__cCs)d|jjt|jt|jfS)Nz<%s overlapped#=%s result#=%s>)rr1lenrr)rrrr__repr__szIocpProactor.__repr__cCs ||_dS)N)r))rrrrrset_loopszIocpProactor.set_loopNcCs,|js|j||j}g|_|S)N)rr<)rtimeoutrYrrrselects     zIocpProactor.selectcCs |jj}|j||S)N)r)r~r/)rvaluer?rrr_results zIocpProactor._resultrc Cs|j|tjt}yHt|tjrM|j|j||n|j|j|Wnt k r|j dSYnXdd}|j |||S)NcSsay|jSWnLtk r\}z,|jtjkrGt|jnWYdd}~XnXdS)N) getresultr(rAr ERROR_NETNAME_DELETEDConnectionResetErrorr)rqkeyrr+rrr finish_recvs z&IocpProactor.recv..finish_recv) _register_with_iocpr Overlappedr] isinstancesocketZWSARecvrvZReadFileBrokenPipeErrorr _register)rconnnbytesrarrrrrrecvs   zIocpProactor.recvcCs|j|tjt}t|tjrJ|j|j||n|j|j|dd}|j |||S)NcSsay|jSWnLtk r\}z,|jtjkrGt|jnWYdd}~XnXdS)N)rr(rAr rrr)rqrrr+rrr finish_sends z&IocpProactor.send..finish_send) rr rr]rrZWSASendrvZ WriteFiler)rrbufrarrrrrsends  zIocpProactor.sendcs|j|jjtjt}|jjjfdd}tdd}|j ||}||}t j |d|j |S)Ncs^|jtjdj}jtjtj|j j j fS)Nz@P) rstructpackrv setsockoptr SOL_SOCKETr ZSO_UPDATE_ACCEPT_CONTEXT settimeout gettimeout getpeername)rqrrr)rlistenerrr finish_accepts    z*IocpProactor.accept..finish_acceptc ss6y |EdHWn"tjk r1|jYnXdS)N)rrxrd)r%rrrr accept_coros   z(IocpProactor.accept..accept_coror) r_get_accept_socketfamilyr rr]ZAcceptExrvr rrZ ensure_futurer))rrrrrr%coror)rrraccepts   zIocpProactor.acceptcs|jytjjjWnStk r}z3|jtjkrTj ddkrmWYdd}~XnXtj t }|j j|fdd}|j ||S)Nrrcs'|jjtjtjdS)Nr)rrrrr ZSO_UPDATE_CONNECT_CONTEXT)rqrr)rrrfinish_connects   z,IocpProactor.connect..finish_connect)rr Z BindLocalrvrr(rAerrnoZ WSAEINVAL getsocknamerr]Z ConnectExr)rrr errr)rrconnects zIocpProactor.connectcsi|jtjt}|jj}|rD|jSfdd}|j||S)Ncs|jS)N)r)rqrr)rcrrfinish_accept_pipes z4IocpProactor.accept_pipe..finish_accept_pipe)rr rr]ZConnectNamedPipervrr)rrcrZ connectedrr)rcrrus  zIocpProactor.accept_pipeccst}xytj|}PWn:tk rY}z|jtjkrGWYdd}~XnXt|dt}tj |d|j EdHq Wt j |S)Nr) CONNECT_PIPE_INIT_DELAYr Z ConnectPiper(rAZERROR_PIPE_BUSYminCONNECT_PIPE_MAX_DELAYrsleepr)r r^)rr delayr9r+rrrrlszIocpProactor.connect_pipecCs|j||dS)zWait for a handle. Return a Future object. The result of the future is True if the wait completed, or False if the wait did not complete (on timeout). F)_wait_for_handle)rr9rrrrwait_for_handle*szIocpProactor.wait_for_handlecCs"|j|dd}||_|S)NT)rrE)rrFZ done_callbackr?rrrrP2s zIocpProactor._wait_cancelcs|dkrtj}ntj|d}tjt}tj||j|j |}|r|t |||d|j nt ||||d|j j rj d=fdd}|d|f|j|j <S)Ng@@rrcs jS)N)r<)rqrr)rorrfinish_wait_for_handleMsz=IocpProactor._wait_for_handle..finish_wait_for_handlerr)r;INFINITEmathceilr rr]ZRegisterWaitWithQueuerr rDr)rIrr)rr9rZ _is_cancelmsrr:rr)rorr9s      zIocpProactor._wait_for_handlecCsB||jkr>|jj|tj|j|jdddS)Nr)r8r_r rrvr)robjrrrrYsz IocpProactor._register_with_iocpcCst|d|j}|jr(|jd=|jsy|dd|}Wn2tk r{}z|j|WYdd}~XnX|j|||||f|j|j<|S)Nrrr) rr)rrr(r.r/rr )rrrcallbackrorrrrrrcs     zIocpProactor._registercCs|jj|dS)a Unregister an overlapped object. Call this method when its future has been cancelled. The event can already be signalled (pending in the proactor event queue). It is also safe if the event is never signalled (because it was cancelled). N)rr>)rrrrrrOszIocpProactor._unregistercCs tj|}|jd|S)Nr)rr)rrsrrrrs zIocpProactor._get_accept_socketcCs|dkrt}nF|dkr0tdn+tj|d}|tkr[tdxutj|j|}|dkrPd}|\}}}}y"|jj|\}} } } Wnrt k r.|j j r|j j dddd||||fi|dtj fkr'tj|w^YnX| |jkrK|jq^|js^y| ||| } WnBtk r} z"|j| |jj|WYdd} ~ Xq^X|j| |jj|q^Wx'|jD]} |jj| jdqW|jjdS) Nrznegative timeoutg@@ztimeout too bigr#z8GetQueuedCompletionStatus() returned an unexpected eventstatusz)err=%s transferred=%s key=%#x address=%#x)r ValueErrorrrr ZGetQueuedCompletionStatusrrpopKeyErrorr)Z get_debugr*rr;rNrr'doner(r.rr>r/rr re)rrrrrZ transferredrr rorrrrrrrrr<sJ      "      # zIocpProactor._pollcCs|jj|dS)N)rr_)rrrrr _stop_servingszIocpProactor._stop_servingcCs7xt|jjD]\}\}}}}|jr=qt|trOqy|jWqtk r}zR|jdk rddd|d|i}|j r|j |d<|jj |WYdd}~XqXqWx)|jr|j dst j dqWg|_|jdk r3tj|jd|_dS)Nr#zCancelling a future failedr$r%r&rz"taking long time to close proactor)listritems cancelledrrDr'r(r)rr*r<r debugrrr;rN)rr r?rrrr+r,rrrrds,.    '  zIocpProactor.closecCs|jdS)N)rd)rrrrrfszIocpProactor.__del__)r1r2r3r4rrrrrrrrrrur rlrrPrrrrOrr<rrdrfrrrrrs.          7  c@seZdZddZdS)rc swtj|d|d|d|d|d||_fdd}jjjtjj} | j|dS)Nrrrrrcs jj}j|dS)N)_procpollZ_process_exited)ro returncode)rrrrsz4_WindowsSubprocessTransport._start..callback) r Popenrr)rJrintr6ry) rrrrrrrrrror)rr_starts !z"_WindowsSubprocessTransport._startN)r1r2r3rrrrrrs rc@seZdZeZdS)_WindowsDefaultEventLoopPolicyN)r1r2r3r Z _loop_factoryrrrrrs r)-r4r;rrrrrSrrrrrrr r Z coroutinesr logr __all__r]rZERROR_CONNECTION_REFUSEDZERROR_CONNECTION_ABORTEDrrFuturerr5rDrIobjectrQZBaseSelectorEventLooprgZBaseProactorEventLooprrZBaseSubprocessTransportrr ZBaseDefaultEventLoopPolicyrrrrrrsJ        0J4;]j