403Webshell
Server IP : 127.0.0.1  /  Your IP : 216.73.216.109
Web Server : Apache/2.4.54 (Win64) OpenSSL/1.1.1q PHP/8.1.10
System : Windows NT DESKTOP-E5T4RUN 10.0 build 19045 (Windows 10) AMD64
User : SERVERWEB ( 0)
PHP Version : 8.1.10
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : OFF |  Perl : OFF |  Python : OFF |  Sudo : OFF |  Pkexec : OFF
Directory :  C:/cygwin64/lib/python3.6/asyncio/__pycache__/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : C:/cygwin64/lib/python3.6/asyncio/__pycache__/unix_events.cpython-36.pyc
3

u1�a���
@s dZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZddl
mZddl
m
Z
ddl
mZddl
mZdd	l
mZdd
l
mZddl
mZddl
mZdd
l
mZddlmZddlmZdddddgZejdkr�ed��dd�Zy
ejZWnek
�r,dd�ZYnXGdd�dej�Z e!ed��rVdd�Z"nddl#Z#d d�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.�Z0Gd/d0�d0ej1�Z2e Z3e2Z4dS)1z2Selector event loop for Unix with signal handling.�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)zDummy signal handler.N�)�signum�framerr�!/usr/lib/python3.6/unix_events.py�_sighandler_noop%srcCs|S)Nr)�pathrrr�<lambda>.srcs�eZdZdZd"�fdd�	Zdd�Z�fdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zd#dd�Zd$dd�Z
ed%dd��Zdd�Zedddd�dd��Zed&dddd�d d!��Z�ZS)'�_UnixSelectorEventLoopzdUnix event loop.

    Adds signal handling and UNIX Domain Socket support to SelectorEventLoop.
    Ncst�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
tfk
rt}ztt
|���WYdd}~XnXtj|||�}||j|<ytj|t�tj|d�Wn�tk
�rB}zz|j|=|j�sytjd�Wn4t
tfk
�r}ztjd|�WYdd}~XnX|jtjk�r0tdj|���n�WYdd}~XnXdS)z�Add a handler for a signal.  UNIX only.

        Raise ValueError if the signal number is invalid or uncatchable.
        Raise RuntimeError if there is a problem setting up the handler.
        z3coroutines cannot be used with add_signal_handler()NFrzset_wakeup_fd(-1) failed: %szsig {} cannot be caught���)rZiscoroutineZiscoroutinefunction�	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)z2Internal helper that is the actual signal handler.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)zwRemove a handler for a signal.  UNIX only.

        Return True if a signal handler was removed, False if not.
        Fzsig {} cannot be caughtNrzset_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)z�Internal helper to validate a signal.

        Raise ValueError if the signal number is invalid or uncatchable.
        Raise RuntimeError if there is a problem setting up the handler.
        zsig must be an int, not {!r}rzsig {} out of range(1, {})N)�
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_hostnameccs|dkst|t�st�|r,|dkr<td��n|dk	r<td��|dk	r�|dk	rTtd��tjtjtjd�}y |jd�|j||�EdHWq�|j	��Yq�XnB|dkr�td��|j
tjks�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})rLr<�AssertionErrorr9r#�AF_UNIX�SOCK_STREAM�setblockingZsock_connectr&�familyr�_is_stream_socket�typerAZ_create_connection_transport)r �protocol_factoryrrhrirj�	transportrQrrr�create_unix_connection�s:


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)rrw)rL�boolr4r9�_fspathr#rlrm�stat�S_ISSOCK�os�st_mode�remove�FileNotFoundErrorr:r�errorZbindr&r?Z
EADDRINUSErArorrprqZServerZlistenrnZ_start_serving)
r rrrrirvrhrdrD�msgZserverrrr�create_unix_serversP

 




z)_UnixSelectorEventLoop.create_unix_server)N)NN)NN)N)N)�__name__�
__module__�__qualname__�__doc__rr$r&r2rFr0r*r5rTrVr
rerZrtr��
__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�Zdd�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}rz�S_ISFIFOr{�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_eventrZ
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�	exceptionrsrQ)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._closecCs4z|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�Zdd�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|_
tj|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}rzr�r�r{r9r�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�rZEVENT_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_readycCs0t|tttf�stt|���t|t�r.t|�}|s6dS|jsB|jrj|jtj	krXt
jd�|jd7_dS|j�syt
j|j|�}WnTttfk
r�d}Yn:tk
r�}z|jd7_|j|d�dSd}~XnX|t|�kr�dS|dk�rt|�|d�}|jj|j|j�|j|7_|j�dS)Nz=pipe closed by peer or os.write(pipe, data) raised exception.rrz#Fatal write error on pipe transport)rL�bytesr��
memoryviewrk�reprr�r�rZ!LOG_THRESHOLD_FOR_CONNLOST_WRITESr�warningr�r|�writer�r�r�r[r�r�r�Z_add_writer�_write_readyZ_maybe_pause_protocol)r r1�nrDrrrr�s4


z_UnixWritePipeTransport.writecCs�|jstd��ytj|j|j�}Wnjttfk
r:Yn�tk
r�}z8|jj�|j	d7_	|j
j|j�|j|d�WYdd}~XnfX|t
|j�kr�|jj�|j
j|j�|j�|jr�|j
j|j�|jd�dS|dkr�|jd|�=dS)NzData should not be emptyrz#Fatal write error on pipe transportr)r�rkr|r�r�r�r�r[r.r�r��_remove_writerr�r�Z_maybe_resume_protocolr�r�r�)r r�rDrrrr�>s(


z$_UnixWritePipeTransport._write_readycCsdS)NTr)r rrr�
can_write_eofXsz%_UnixWritePipeTransport.can_write_eofcCsB|jr
dS|jst�d|_|js>|jj|j�|jj|jd�dS)NT)	r�r�rkr�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�rsrQ)
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._closecCs4z|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�ZinheritableZ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@eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dS)raHAbstract base class for monitoring child processes.

    Objects derived from this class monitor a collection of subprocesses and
    report their termination or interruption by a signal.

    New callbacks are registered with .add_child_handler(). Starting a new
    process must be done within a 'with' block to allow the watcher to suspend
    its activity until the new process if fully registered (this is needed to
    prevent a race condition in some implementations).

    Example:
        with watcher:
            proc = subprocess.Popen("sleep 1")
            watcher.add_child_handler(proc.pid, callback)

    Notes:
        Implementations of this class must be thread-safe.

        Since child watcher objects may catch the SIGCHLD signal and call
        waitpid(-1), there should be only one active object per process.
    cGs
t��dS)aRegister a new child handler.

        Arrange for callback(pid, returncode, *args) to be called when
        process 'pid' terminates. Specifying another callback for the same
        process replaces the previous handler.

        Note: callback() must be thread-safe.
        N)�NotImplementedError)r rfrBrCrrrrY�s	z&AbstractChildWatcher.add_child_handlercCs
t��dS)z�Removes the handler for process 'pid'.

        The function returns True if the handler was successfully removed,
        False if there was nothing to remove.N)r�)r rfrrr�remove_child_handler�sz)AbstractChildWatcher.remove_child_handlercCs
t��dS)z�Attach the watcher to an event loop.

        If the watcher was previously attached to an event loop, then it is
        first detached before attaching to the new loop.

        Note: loop may be None.
        N)r�)r r�rrr�attach_loop�sz AbstractChildWatcher.attach_loopcCs
t��dS)zlClose the watcher.

        This must be called to make sure that any underlying resource is freed.
        N)r�)r rrrr&�szAbstractChildWatcher.closecCs
t��dS)zdEnter the watcher's context and allow starting new processes

        This function must return selfN)r�)r rrr�	__enter__szAbstractChildWatcher.__enter__cCs
t��dS)zExit the watcher's contextN)r�)r �a�b�crrr�__exit__	szAbstractChildWatcher.__exit__N)
r�r�r�r�rYr�r�r&r�r�rrrrr�s
c@sDeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�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_allcCs~|dkst|tj�st�|jdk	r<|dkr<|jr<tjdt�|jdk	rT|jj	t
j�||_|dk	rz|jt
j|j
�|j�dS)NzCA loop is being detached from a child watcher with pending handlers)rLrZAbstractEventLooprkr�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�csPeZdZdZ�fdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
�ZS)rad'Safe' child watcher implementation.

    This implementation avoids disrupting other code spawning processes by
    polling explicitly each process in the SIGCHLD handler instead of calling
    os.waitpid(-1).

    This is a safe solution but it has a significant overhead when handling a
    big number of children (O(n) each time SIGCHLD is raised)
    cs|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_handlercCs&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�|dkst�ytj|tj�\}}Wn(tk
rJ|}d}tjd|�Yn0X|dkrXdS|j|�}|jj	�rztj
d||�y|jj|�\}}Wn.t
k
r�|jj	�r�tjd|dd�YnX|||f|��dS)Nr�z8Unknown child process pid %d, will report returncode 255z$process %s exited with returncode %sz'Child watcher got an unexpected pid: %rT)r�)rkr|�waitpid�WNOHANG�ChildProcessErrorrr�r�r�r�r�r��poprH)r r�rfr�rgrBrCrrrr�ws,


zSafeChildWatcher._do_waitpid)r�r�r�r�r&r�r�rYr�r�r�r�rr)r"rrKs	csTeZdZdZ�fdd�Z�fdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
�ZS)raW'Fast' child watcher implementation.

    This implementation reaps every terminated processes by calling
    os.waitpid(-1) directly, possibly breaking other code spawning processes
    and waiting for their termination.

    There is no noticeable overhead when handling a big number of children
    (O(1) each time a child terminates).
    cs$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�rr�r<r.rr�)r r�r�r�Zcollateral_victimsrrrr��s
zFastChildWatcher.__exit__cGsz|jstd��|jdkr td��|j�:y|jj|�}Wn"tk
rZ||f|j|<dSXWdQRX|||f|��dS)NzMust use the context managerzICannot add child handler, the child watcher does not have a loop attached)	rrkr�r;r�r�r�rHr�)r rfrBrCrgrrrrY�s
z"FastChildWatcher.add_child_handlercCs&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
|<|jj�r�t
jd||�wd}YnX|jj�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�rHrr�r�r�rr�r�)r rfr�rgrBrCrrrr��s6





z FastChildWatcher._do_waitpid_all)r�r�r�r�rr&r�r�rYr�r�r�rr)r"rr�s	csHeZdZdZeZ�fdd�Zdd�Z�fdd�Zdd	�Z	d
d�Z
�ZS)�_UnixDefaultEventLoopPolicyz:UNIX event loop policy with a watcher for child processes.cst�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�rrrLr��current_thread�_MainThreadr��_localr�)r rrr�
_init_watchers
z)_UnixDefaultEventLoopPolicy._init_watchercs6t�j|�|jdk	r2ttj�tj�r2|jj|�dS)z�Set the event loop.

        As a side effect, if a child watcher was set before, then calling
        .set_event_loop() from the main thread will call .attach_loop(loop) on
        the child watcher.
        N)r�set_event_looprrLr�rrr�)r r�)r"rrrs
z*_UnixDefaultEventLoopPolicy.set_event_loopcCs|jdkr|j�|jS)zzGet the watcher for child processes.

        If not yet set, a SafeChildWatcher object is automatically created.
        N)rr)r rrrrW&s
z-_UnixDefaultEventLoopPolicy.get_child_watchercCs4|dkst|t�st�|jdk	r*|jj�||_dS)z$Set the watcher for child processes.N)rLrrkrr&)r rbrrr�set_child_watcher0s

z-_UnixDefaultEventLoopPolicy.set_child_watcher)r�r�r�r�rZ
_loop_factoryrrrrWrr�rr)r"rrs
r)5r�r?r|r6r#rzr�r'r�r+�rrrrrrr	r
rrr
�logr�__all__r��ImportErrorr�fspathry�AttributeErrorZBaseSelectorEventLoopr�hasattrr�r�Z
ReadTransportrOZ_FlowControlMixinZWriteTransportrUr�r�ZBaseSubprocessTransportrXrr�rrZBaseDefaultEventLoopPolicyrrrrrrr�<module>sn


O
F=On2

Youez - 2016 - github.com/yon3zu
LinuXploit