
    ;em                        	 d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ dZe	j        dk    r ed          d Zd Z G d dej                  Z G d dej                   Z! G d dej"        ej#                  Z$ G d dej%                  Z& G d d          Z' G d de'          Z( G d d e'          Z) G d! d"e)          Z* G d# d$e)          Z+ G d% d&e'          Z, G d' d(e'          Z- G d) d*ej.                  Z/eZ0e/Z1dS )+    N   )base_events)base_subprocess)	constants)
coroutines)events)
exceptions)futures)selector_events)tasks)
transports)logger)SelectorEventLoopAbstractChildWatcherSafeChildWatcherFastChildWatcherPidfdChildWatcherMultiLoopChildWatcherThreadedChildWatcherDefaultEventLoopPolicywin32z+Signals are not really supported on Windowsc                     	 d S N )signumframes     */usr/lib/python3.11/asyncio/unix_events.py_sighandler_noopr   *   s
    D    c                 P    	 t          j        |           S # t          $ r | cY S w xY wr   )oswaitstatus_to_exitcode
ValueError)statuss    r   r"   r"   /   s>    (000    	s    %%c                        e Zd Z	 d fd	Z fdZd Zd Zd Zd Zd Z		 	 dd	Z
	 	 dd
Z	 ddZd Z	 ddddddddZ	 dddddddddZd Zd Zd Zd Z xZS )_UnixSelectorEventLoopNc                 X    t                                          |           i | _        d S r   )super__init___signal_handlers)selfselector	__class__s     r   r)   z_UnixSelectorEventLoop.__init__?   s)    """ "r   c                 N   t                                                       t          j                    s.t	          | j                  D ]}|                     |           d S | j        r;t          j        d| dt          |            | j        
                                 d S d S )NzClosing 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+   sigr-   s     r   r1   z_UnixSelectorEventLoop.closeC   s     "" 
	.D122 0 0**3////0 0 $ . I$ I I I .%)	+ + + +
 %++-----. .r   c                 @    |D ]}|s|                      |           d S r   )_handle_signal)r+   datar   s      r   _process_self_dataz)_UnixSelectorEventLoop._process_self_dataQ   s=     	( 	(F ''''		( 	(r   c                 T   	 t          j        |          st          j        |          rt          d          |                     |           |                                  	 t          j        | j        	                                           n5# t          t          f$ r!}t          t          |                    d }~ww xY wt          j        ||| d           }|| j        |<   	 t          j        |t"                     t          j        |d           d S # t          $ r}| j        |= | j        sI	 t          j        d           n3# t          t          f$ r}t'          j        d|           Y d }~nd }~ww xY w|j        t*          j        k    rt          d| d           d }~ww xY w)Nz3coroutines cannot be used with add_signal_handler()Fset_wakeup_fd(-1) failed: %ssig  cannot be caught)r   iscoroutineiscoroutinefunction	TypeError_check_signal_check_closedsignalset_wakeup_fd_csockfilenor#   OSErrorRuntimeErrorstrr   Handler*   r   siginterruptr   infoerrnoEINVAL)r+   r:   callbackargsexchandlenexcs          r   add_signal_handlerz)_UnixSelectorEventLoop.add_signal_handlerX   s   	
 "8,, 	9.x88	9 8 9 9 93	)
  !3!3!5!56666G$ 	) 	) 	)s3xx(((	) xtT::%+c"	 M#/000 U+++++ 	 	 	%c*( FF(,,,,"G, F F FK >EEEEEEEEF yEL(("#@##@#@#@AAA	sZ   #+B C B<<C&/D 
F'!F"1EF"E6E1,F"1E66,F""F'c                     	 | j                             |          }|d S |j        r|                     |           d S |                     |           d S r   )r*   get
_cancelledr5   _add_callback_signalsafe)r+   r:   rX   s      r   r<   z%_UnixSelectorEventLoop._handle_signal   sd    @&**3//>F 	2&&s+++++))&11111r   c                    	 |                      |           	 | j        |= n# t          $ r Y dS w xY w|t          j        k    rt          j        }nt          j        }	 t          j        ||           n;# t          $ r.}|j        t          j	        k    rt          d| d           d }~ww xY w| j        sI	 t          j        d           n3# t          t          f$ r}t          j        d|           Y d }~nd }~ww xY wdS )NFrB   rC   r@   rA   T)rG   r*   KeyErrorrI   SIGINTdefault_int_handlerSIG_DFLrM   rS   rT   rN   rJ   r#   r   rR   )r+   r:   handlerrW   s       r   r5   z,_UnixSelectorEventLoop.remove_signal_handler   sP   	 	3	%c** 	 	 	55	 &-0GGnG	M#w'''' 	 	 	yEL(("#@##@#@#@AAA		 $ 	AA$R((((( A A A:C@@@@@@@@A ts<   ! 
//A2 2
B*<)B%%B*5C
 
C:C55C:c                     	 t          |t                    st          d|          |t          j                    vrt          d|           d S )Nzsig must be an int, not zinvalid signal number )
isinstanceintrF   rI   valid_signalsr#   )r+   r:   s     r   rG   z$_UnixSelectorEventLoop._check_signal   sf    	
 #s## 	@>s>>???f*,,,,;c;;<<< -,r   c                 (    t          | ||||          S r   )_UnixReadPipeTransportr+   pipeprotocolwaiterextras        r   _make_read_pipe_transportz0_UnixSelectorEventLoop._make_read_pipe_transport   s    %dD(FEJJJr   c                 (    t          | ||||          S r   )_UnixWritePipeTransportrk   s        r   _make_write_pipe_transportz1_UnixSelectorEventLoop._make_write_pipe_transport   s    &tT8VUKKKr   c	                 
  K   t          j                    5 }
|
                                st          d          |                                 }t          | |||||||f||d|	}|
                    |                                | j        |           	 | d {V  nN# t          t          f$ r  t          $ r0 |                                 |                                 d {V   w xY w	 d d d            n# 1 swxY w Y   |S )NzRasyncio.get_child_watcher() is not activated, subprocess support is not installed.)rn   ro   )r   get_child_watcher	is_activerN   create_future_UnixSubprocessTransportadd_child_handlerget_pid_child_watcher_callback
SystemExitKeyboardInterruptBaseExceptionr1   _wait)r+   rm   rV   shellstdinstdoutstderrbufsizero   kwargswatcherrn   transps                r   _make_subprocess_transportz1_UnixSelectorEventLoop._make_subprocess_transport   s      %'' 	7$$&& K
 # $J K K K''))F-dHdE.3VVW85;58 8 178 8F
 %%fnn&6&6&*&BFL L L 12       llnn$$$$$$$ #	 	 	 	 	 	 	 	 	 	 	 	 	 	 	2 s+   A=C8BC8AC((C88C<?C<c                 H    |                      | j        |j        |           d S r   )call_soon_threadsafe	call_soon_process_exited)r+   pid
returncoder   s       r   r{   z._UnixSelectorEventLoop._child_watcher_callback   s%    !!$.&2H*UUUUUr   )sslsockserver_hostnamessl_handshake_timeoutssl_shutdown_timeoutc                  K   |r|t          d          n3|t          d          |t          d          |t          d          ||t          d          t          j        |          }t          j        t          j        t          j        d          }	 |                    d           |                     ||           d {V  n|#  |                                  xY w|t          d          |j	        t          j        k    s|j
        t          j        k    rt          d	|          |                    d           |                     ||||||
           d {V \  }}	||	fS )Nz/you have to pass server_hostname when using sslz+server_hostname is only meaningful with ssl1ssl_handshake_timeout is only meaningful with ssl0ssl_shutdown_timeout is only meaningful with ssl3path and sock can not be specified at the same timer   Fzno path and sock were specified.A UNIX Domain Stream Socket was expected, got )r   r   )r#   r!   fspathsocketAF_UNIXSOCK_STREAMsetblockingsock_connectr1   familytype_create_connection_transport)
r+   protocol_factorypathr   r   r   r   r   	transportrm   s
             r   create_unix_connectionz-_UnixSelectorEventLoop.create_unix_connection   s       	H& EG G G ' * !NOOO$0 GI I I#/ FH H H  IK K K 9T??D=1CQGGD  '''''d3333333333

 | !BCCCv~--I!333 MTMMO O OU###$($E$E"C"7!5 %F %7 %7 7 7 7 7 7 7	8 (""s   1C C%d   T)r   backlogr   r   r   start_servingc          	        K   t          |t                    rt          d          ||st          d          ||st          d          |Z|t          d          t	          j        |          }t          j        t          j        t          j                  }|d         dvry	 t          j
        t	          j	        |          j                  rt	          j        |           n8# t          $ r Y n,t          $ r }	t          j        d||	           Y d }	~	nd }	~	ww xY w	 |                    |           n# t          $ rP}
|                                 |
j        t&          j        k    r!d|d	}t          t&          j        |          d  d }
~
w |                                  xY w|t          d
          |j        t          j        k    s|j        t          j        k    rt          d|          |                    d           t1          j        | |g|||||          }|r.|                                 t7          j        d           d {V  |S )Nz*ssl argument must be an SSLContext or Noner   r   r   r   )r    z2Unable to check or remove stale UNIX socket %r: %rzAddress z is already in usez-path was not specified, and no sock specifiedr   F)rf   boolrF   r#   r!   r   r   r   r   statS_ISSOCKst_moderemoveFileNotFoundErrorrM   r   errorbindr1   rS   
EADDRINUSEr   r   r   r   Server_start_servingr   sleep)r+   r   r   r   r   r   r   r   r   errrW   msgservers                r   create_unix_serverz)_UnixSelectorEventLoop.create_unix_server  s      c4   	JHIII ,S,CE E E  +C+BD D D  IK K K 9T??D=1CDDD Awk))6}RWT]]%:;; (	$(   D 6 6 6L "*+/6 6 6 6 6 6 6 66
		$   

9 000 @T???C!%"2C88dB

| CE E E v~--I!333 MTMMO O O 	#D4&2B$'2G$8: :  	!!!### +a..       s7   )?C) )
D5	D>DD"D8 8
F'AFF'c           
        K   	 t           j         n"# t          $ r t          j        d          w xY w	 |                                }n2# t          t          j        f$ r}t          j        d          d }~ww xY w	 t          j        |          j	        }n"# t          $ r t          j        d          w xY w|r|n|}|sdS |                                 }	|                     |	d |||||d           |	 d {V S )Nzos.sendfile() is not availableznot a regular filer   )r!   sendfileAttributeErrorr	   SendfileNotAvailableErrorrL   ioUnsupportedOperationfstatst_sizerM   rw   _sock_sendfile_native_impl)
r+   r   fileoffsetcountrL   r   fsize	blocksizefuts
             r   _sock_sendfile_nativez,_UnixSelectorEventLoop._sock_sendfile_native`  sN     	2KKK 	2 	2 	2602 2 2	2	M[[]]FF 78 	M 	M 	M67KLLL	M	MHV$$,EE 	M 	M 	M67KLLL	M"-EE	 	1  ""''T4(.y!	E 	E 	Eyyyyyys+    0A	 	A8A33A8<B B5c	                 L   |                                 }	||                     |           |                                r|                     |||           d S |r9||z
  }|dk    r.|                     |||           |                    |           d S 	 t          j        |	|||          }
|
dk    r.|                     |||           |                    |           d S ||
z  }||
z  }||                     ||           |                     |	| j	        ||	||||||
  
         d S # t          t          f$ r? ||                     ||           |                     |	| j	        ||	||||||
  
         Y d S t          $ r}|N|j        t          j        k    r9t          |          t           ur#t!          dt          j                  }||_        |}|dk    rAt%          j        d          }|                     |||           |                    |           n2|                     |||           |                    |           Y d }~d S Y d }~d S d }~wt*          t,          f$ r  t.          $ r7}|                     |||           |                    |           Y d }~d S d }~ww xY w)Nr   zsocket is not connectedzos.sendfile call failed)rL   remove_writer	cancelled_sock_sendfile_update_filepos
set_resultr!   r   _sock_add_cancellation_callback
add_writerr   BlockingIOErrorInterruptedErrorrM   rS   ENOTCONNr   ConnectionError	__cause__r	   r   set_exceptionr|   r}   r~   )r+   r   registered_fdr   rL   r   r   r   
total_sentfdsentrW   new_excr   s                 r   r   z1_UnixSelectorEventLoop._sock_sendfile_native_implw  sb   [[]]$
 }---==?? 	..vvzJJJF 	
*IA~~2266:NNNz***1	F;r669==DJ qyy2266:NNNz*****$d"
 (88dCCCD$CS "D& &y*F F F F F[  !12 	B 	B 	B$44S$???OOB ?f"E9jB B B B B B  	' 	' 	')I//II_44
 *-u~? ?$'!Q
 !:-/ /2266:NNN!!#&&&&2266:NNN!!#&&&&&&&&& '&&&&& -. 	 	 	 	# 	# 	#..vvzJJJc"""""""""	#s,   D' 'AJ#6	J#?CIJ#,,JJ#c                 V    |dk    r"t          j        ||t           j                   d S d S Nr   )r!   lseekSEEK_SET)r+   rL   r   r   s       r   r   z4_UnixSelectorEventLoop._sock_sendfile_update_filepos  s.    >>HVVR[11111 >r   c                 @      fd}|                     |           d S )Nc                     |                                  r1                                }|dk    r                    |           d S d S d S )Nr@   )r   rL   r   )r   r   r+   r   s     r   cbzB_UnixSelectorEventLoop._sock_add_cancellation_callback.<locals>.cb  sR    }} +[[]]88&&r*****+ +8r   )add_done_callback)r+   r   r   r   s   ` ` r   r   z6_UnixSelectorEventLoop._sock_add_cancellation_callback  s>    	+ 	+ 	+ 	+ 	+ 	+
 	b!!!!!r   r   NN)__name__
__module____qualname__r)   r1   r>   rZ   r<   r5   rG   rp   rs   r   r{   r   r   r   r   r   r   __classcell__r-   s   @r   r&   r&   9   s       
# # # # # #. . . . .( ( (+ + +Z2 2 2  @
= 
= 
= @D(,K K K K AE)-L L L L 04   <V V V
 *.0#4 "&!%0# 0# 0# 0# 0#f *.Gs"&!%G G G G GR  .DF DF DFL2 2 2" " " " " " "r   r&   c                        e Zd ZdZd fd	Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zej        fdZddZd Zd Z xZS )rj   i   Nc                    t                                          |           || j        d<   || _        || _        |                                | _        || _        d| _        d| _	        t          j        | j                  j        }t          j        |          sLt          j        |          s8t          j        |          s$d | _        d | _        d | _        t#          d          t          j        | j        d           | j                            | j        j        |            | j                            | j        | j        | j                   |(| j                            t.          j        |d            d S d S )Nrl   Fz)Pipe transport is for pipes/sockets only.)r(   r)   _extra_loop_piperL   _fileno	_protocol_closing_pausedr!   r   r   r   S_ISFIFOr   S_ISCHRr#   set_blockingr   connection_made_add_reader_read_readyr
   _set_result_unless_cancelled)r+   looprl   rm   rn   ro   moder-   s          r   r)   z_UnixReadPipeTransport.__init__  sb   "F

{{}}!x%%-d## 	Jd##	JT""	J DJDL!DNHIII
e,,,
T^;TBBB
T-!\4+;	= 	= 	=J  !E!'/ / / / / r   c                 h    |                                  sd S | j                            ||           d S r   )
is_readingr   r   )r+   r   rU   s      r   r   z"_UnixReadPipeTransport._add_reader  s7       	F
r8,,,,,r   c                 "    | j          o| j         S r   )r   r   r+   s    r   r   z!_UnixReadPipeTransport.is_reading  s    <5$55r   c                 `   | j         j        g}| j        |                    d           n| j        r|                    d           |                    d| j                    t          | j        dd           }| j        U|St          j	        || j        t          j                  }|r|                    d           nH|                    d           n2| j        |                    d           n|                    d           d                    d	                    |                    S )
Nclosedclosingfd=	_selectorpollingidleopen<{}> )r-   r   r   appendr   r   getattrr   r   _test_selector_event	selectors
EVENT_READformatjoin)r+   rR   r,   r  s       r   __repr__z_UnixReadPipeTransport.__repr__  s    '(:KK!!!!] 	#KK	"""($,(()))4:{D99:!h&:%:$,	(<> >G $I&&&&F####Z#KKKK!!!}}SXXd^^,,,r   c                 4   	 t          j        | j        | j                  }|r| j                            |           d S | j                                        rt          j	        d|            d| _
        | j                            | j                   | j                            | j        j                   | j                            | j        d            d S # t          t           f$ r Y d S t"          $ r!}|                     |d           Y d }~d S d }~ww xY w)N%r was closed by peerTz"Fatal read error on pipe transport)r!   readr   max_sizer   data_receivedr   	get_debugr   rR   r   _remove_readerr   eof_received_call_connection_lostr   r   rM   _fatal_error)r+   r=   rW   s      r   r   z"_UnixReadPipeTransport._read_ready	  s5   	G74<77D  G,,T22222:'')) ?K 7>>> $
))$,777
$$T^%@AAA
$$T%?FFFFF  !12 	 	 	DD 	I 	I 	Ic#GHHHHHHHHH	Is   C D-	D6DDc                     |                                  sd S d| _        | j                            | j                   | j                                        rt          j        d|            d S d S )NTz%r pauses reading)r   r   r   r  r   r  r   debugr   s    r   pause_readingz$_UnixReadPipeTransport.pause_reading  sq       	F
!!$,///:!! 	4L,d33333	4 	4r   c                     | j         s| j        sd S d| _        | j                            | j        | j                   | j                                        rt          j        d|            d S d S )NFz%r resumes reading)	r   r   r   r   r   r   r  r   r  r   s    r   resume_readingz%_UnixReadPipeTransport.resume_reading#  sw    = 	 	F
t|T-=>>>:!! 	5L-t44444	5 	5r   c                     || _         d S r   r   r+   rm   s     r   set_protocolz#_UnixReadPipeTransport.set_protocol+      !r   c                     | j         S r   r#  r   s    r   get_protocolz#_UnixReadPipeTransport.get_protocol.  
    ~r   c                     | j         S r   r   r   s    r   
is_closingz!_UnixReadPipeTransport.is_closing1  
    }r   c                 B    | j         s|                     d            d S d S r   )r   _closer   s    r   r1   z_UnixReadPipeTransport.close4  s.    } 	KK	 	r   c                 v    | j         1 |d| t          |            | j                                          d S d S Nzunclosed transport r/   r   r8   r1   r+   _warns     r   __del__z_UnixReadPipeTransport.__del__8  L    :!E000/$OOOOJ "!r   Fatal error on pipe transportc                 0   t          |t                    rG|j        t          j        k    r2| j                                        rt          j        d| |d           n$| j                            ||| | j	        d           | 
                    |           d S Nz%r: %sTexc_info)message	exceptionr   rm   )rf   rM   rS   EIOr   r  r   r  call_exception_handlerr   r/  r+   rW   r<  s      r   r  z#_UnixReadPipeTransport._fatal_error=  s    sG$$ 		ei)?)?z##%% EXtWtDDDDJ--" ! N	/ /    	Cr   c                     d| _         | j                            | j                   | j                            | j        |           d S NT)r   r   r  r   r   r  r+   rW   s     r   r/  z_UnixReadPipeTransport._closeK  sB    
!!$,///
T7=====r   c                     	 | j                             |           | j                                         d | _        d | _         d | _        d S # | j                                         d | _        d | _         d | _        w xY wr   r   connection_lostr   r1   r   rC  s     r   r  z,_UnixReadPipeTransport._call_connection_lostP      	N**3///JDJ!DNDJJJ JDJ!DNDJ   A 0A<r   r7  )r   r   r   r  r)   r   r   r  r   r  r!  r%  r(  r,  r1   r6   r7   r5  r  r/  r  r   r   s   @r   rj   rj     s(       H/ / / / / /<- - -
6 6 6- - -*G G G$4 4 45 5 5" " "       %M    
   > > >
      r   rj   c                        e Zd Zd fd	Zd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zej        fdZd ZddZddZd Z xZS )rr   Nc                 p   t                                          ||           || j        d<   || _        |                                | _        || _        t                      | _        d| _	        d| _
        t          j        | j                  j        }t          j        |          }t          j        |          }t          j        |          }	|s(|s&|	s$d | _        d | _        d | _        t%          d          t          j        | j        d           | j                            | j        j        |            |	s!|rOt.          j                            d          s0| j                            | j        j        | j        | j                   |(| j                            t8          j        |d            d S d S )Nrl   r   Fz?Pipe transport is only for pipes, sockets and character devicesaix)r(   r)   r   r   rL   r   r   	bytearray_buffer
_conn_lostr   r!   r   r   r   r   r   r   r#   r   r   r   r   r2   platform
startswithr   r   r
   r   )r+   r   rl   rm   rn   ro   r   is_charis_fifo	is_socketr-   s             r   r)   z _UnixWritePipeTransport.__init__]  s   %%%"F
{{}}! {{x%%-,t$$-%%M$''	 	E7 	Ei 	EDJDL!DN D E E E 	e,,,
T^;TBBB
  	A 	A)@)@)G)G 	AJ  !7!%t/?A A A J  !E!'/ / / / / r   c                    | j         j        g}| j        |                    d           n| j        r|                    d           |                    d| j                    t          | j        dd           }| j        |t          j	        || j        t          j                  }|r|                    d           n|                    d           |                                 }|                    d|            n2| j        |                    d           n|                    d           d	                    d
                    |                    S )Nr  r  r  r  r  r  zbufsize=r  r	  r
  )r-   r   r   r  r   r   r  r   r   r  r  EVENT_WRITEget_write_buffer_sizer  r  )r+   rR   r,   r  r   s        r   r  z _UnixWritePipeTransport.__repr__  sL   '(:KK!!!!] 	#KK	"""($,(()))4:{D99:!h&:%:$,	(=? ?G $I&&&&F###0022GKK,7,,----Z#KKKK!!!}}SXXd^^,,,r   c                 *    t          | j                  S r   )lenrN  r   s    r   rW  z-_UnixWritePipeTransport.get_write_buffer_size  s    4<   r   c                     | j                                         rt          j        d|            | j        r#|                     t                                 d S |                                  d S )Nr  )r   r  r   rR   rN  r/  BrokenPipeErrorr   s    r   r   z#_UnixWritePipeTransport._read_ready  sd    :!! 	7K/666< 	KK))*****KKMMMMMr   c                    t          |t                    rt          |          }|sd S | j        s| j        r;| j        t
          j        k    rt          j        d           | xj        dz  c_        d S | j	        s	 t          j        | j        |          }nc# t          t          f$ r d}Y nNt          t           f$ r  t"          $ r1}| xj        dz  c_        |                     |d           Y d }~d S d }~ww xY w|t'          |          k    rd S |dk    rt          |          |d          }| j                            | j        | j                   | xj	        |z  c_	        |                                  d S )Nz=pipe closed by peer or os.write(pipe, data) raised exception.r   r   #Fatal write error on pipe transport)rf   rM  
memoryviewrO  r   r   !LOG_THRESHOLD_FOR_CONNLOST_WRITESr   warningrN  r!   writer   r   r   r|   r}   r~   r  rY  r   _add_writer_write_ready_maybe_pause_protocol)r+   r=   nrW   s       r   ra  z_UnixWritePipeTransport.write  s   dI&& 	$d##D 	F? 	dm 	)"MMM  H I I IOOq OOF| 	D	HT\400#%56    12       1$!!#'LMMM CII~~Q!$''+J""4<1BCCC""$$$$$s   :B C5*C5&C00C5c                    	 t          j        | j        | j                  }|t	          | j                  k    r| j                                         | j                            | j                   |                                  | j	        r4| j        
                    | j                   |                     d            d S |dk    r| j        d |= d S d S # t          t          f$ r Y d S t          t          f$ r  t           $ ri}| j                                         | xj        dz  c_        | j                            | j                   |                     |d           Y d }~d S d }~ww xY w)Nr   r   r]  )r!   ra  r   rN  rY  r9   r   _remove_writer_maybe_resume_protocolr   r  r  r   r   r|   r}   r~   rO  r  )r+   re  rW   s      r   rc  z$_UnixWritePipeTransport._write_ready  s   	%t|44A C%%%%""$$$
))$,777++---= 5J--dl;;;..t444QL!$$$ )  !12 	 	 	DD-. 	 	 	 	J 	J 	JL   OOq OO J%%dl333c#HIIIIIIIII	Js   C E-*E-AE((E-c                     dS rB  r   r   s    r   can_write_eofz%_UnixWritePipeTransport.can_write_eof      tr   c                     | j         rd S d| _         | j        sA| j                            | j                   | j                            | j        d            d S d S rB  )r   rN  r   r  r   r   r  r   s    r   	write_eofz!_UnixWritePipeTransport.write_eof  sh    = 	F| 	CJ%%dl333J  !;TBBBBB	C 	Cr   c                     || _         d S r   r#  r$  s     r   r%  z$_UnixWritePipeTransport.set_protocol  r&  r   c                     | j         S r   r#  r   s    r   r(  z$_UnixWritePipeTransport.get_protocol  r)  r   c                     | j         S r   r+  r   s    r   r,  z"_UnixWritePipeTransport.is_closing  r-  r   c                 R    | j         | j        s|                                  d S d S d S r   )r   r   rm  r   s    r   r1   z_UnixWritePipeTransport.close  s5    :!$-!NN "!!!r   c                 v    | j         1 |d| t          |            | j                                          d S d S r1  r2  r3  s     r   r5  z_UnixWritePipeTransport.__del__  r6  r   c                 0    |                      d            d S r   )r/  r   s    r   abortz_UnixWritePipeTransport.abort  s    Dr   r7  c                    t          |t                    r2| j                                        rt	          j        d| |d           n$| j                            ||| | j        d           |                     |           d S r9  )	rf   rM   r   r  r   r  r?  r   r/  r@  s      r   r  z$_UnixWritePipeTransport._fatal_error  s    c7## 		z##%% EXtWtDDDDJ--" ! N	/ /    	Cr   c                    d| _         | j        r| j                            | j                   | j                                         | j                            | j                   | j                            | j        |           d S rB  )	r   rN  r   rg  r   r9   r  r   r  rC  s     r   r/  z_UnixWritePipeTransport._close  sx    < 	4J%%dl333
!!$,///
T7=====r   c                     	 | j                             |           | j                                         d | _        d | _         d | _        d S # | j                                         d | _        d | _         d | _        w xY wr   rE  rC  s     r   r  z-_UnixWritePipeTransport._call_connection_lost  rG  rH  r   rI  r   )r   r   r   r)   r  rW  r   ra  rc  rj  rm  r%  r(  r,  r1   r6   r7   r5  rt  r  r/  r  r   r   s   @r   rr   rr   Z  sH       #/ #/ #/ #/ #/ #/J- - -0! ! !  !% !% !%F% % %8  C C C" " "      
 %M    
     > > > >      r   rr   c                       e Zd Zd ZdS )rx   c           
         d }|t           j        k    r5t          j                            d          rt          j                    \  }}	 t          j        |f||||d|d|| _        |D|	                                 t          |                                d|          | j        _        d }|*|	                                 |	                                 d S d S # |)|	                                 |	                                 w w xY w)NrL  F)r   r   r   r   universal_newlinesr   wb)	buffering)
subprocessPIPEr2   rP  rQ  r   
socketpairPopen_procr1   r  detachr   )	r+   rV   r   r   r   r   r   r   stdin_ws	            r   _startz_UnixSubprocessTransport._start)  s   JO##(?(?(F(F#
 $.00NE7	 #)E!vf#('E E=CE EDJ "#'(8(8$'#R#R#R
 " #"w" #s   	A$C -DN)r   r   r   r  r   r   r   rx   rx   '  s#                 r   rx   c                   :    e Zd Z	 d Zd Zd Zd Zd Zd Zd Z	dS )	r   c                      	 t                      r   NotImplementedErrorr+   r   rU   rV   s       r   ry   z&AbstractChildWatcher.add_child_handlerV  s    	 "###r   c                      	 t                      r   r  r+   r   s     r   remove_child_handlerz)AbstractChildWatcher.remove_child_handlera  s    	1
 "###r   c                      	 t                      r   r  r+   r   s     r   attach_loopz AbstractChildWatcher.attach_loopi  s    	 "###r   c                      	 t                      r   r  r   s    r   r1   zAbstractChildWatcher.closes  s    	 "###r   c                      	 t                      r   r  r   s    r   rv   zAbstractChildWatcher.is_activez  s    	 "###r   c                      	 t                      r   r  r   s    r   	__enter__zAbstractChildWatcher.__enter__  s    	* "###r   c                      	 t                      r   r  r+   abcs       r   __exit__zAbstractChildWatcher.__exit__  s    (!###r   N)
r   r   r   ry   r  r  r1   rv   r  r  r   r   r   r   r   ?  s        ,	$ 	$ 	$$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $ $ $r   r   c                   F    e Zd Z	 d Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )r   c                 "    d | _         i | _        d S r   r   
_callbacksr   s    r   r)   zPidfdChildWatcher.__init__      
r   c                     | S r   r   r   s    r   r  zPidfdChildWatcher.__enter__      r   c                     d S r   r   )r+   exc_type	exc_valueexc_tracebacks       r   r  zPidfdChildWatcher.__exit__      r   c                 F    | j         d uo| j                                         S r   r   
is_runningr   s    r   rv   zPidfdChildWatcher.is_active  "    z%A$**?*?*A*AAr   c                 0    |                      d            d S r   r  r   s    r   r1   zPidfdChildWatcher.close      r   c                 6   | j         #|!| j        rt          j        dt                     | j                                        D ]4\  }}}| j                             |           t          j        |           5| j        	                                 || _         d S NzCA loop is being detached from a child watcher with pending handlers)
r   r  r6   r7   RuntimeWarningvaluesr  r!   r1   r9   )r+   r   pidfd_s       r   r  zPidfdChildWatcher.attach_loop  s    :!dltlM=       ?1133 	 	KE1aJ%%e,,,HUOOOO


r   c                     | j                             |          }||d         ||f| j         |<   d S t          j        |          }| j                            || j        |           |||f| j         |<   d S r   )r  r\   r!   
pidfd_openr   r   _do_wait)r+   r   rU   rV   existingr  s         r   ry   z#PidfdChildWatcher.add_child_handler  s~    ?&&s++#+A;$#>DOC   M#&&EJ""5$-===#((D#8DOC   r   c                 R   | j                             |          \  }}}| j                            |           	 t	          j        |d          \  }}t          |          }n'# t          $ r d}t          j	        d|           Y nw xY wt	          j
        |            |||g|R   d S )Nr      zJchild process pid %d exit status already read:  will report returncode 255)r  popr   r  r!   waitpidr"   ChildProcessErrorr   r`  r1   )r+   r   r  rU   rV   r  r$   r   s           r   r  zPidfdChildWatcher._do_wait  s     $ 3 3C 8 8x
!!%(((	8
3**IAv 077JJ ! 	 	 	 JN.    		 	j(4((((((s   A" "!BBc                     	 | j                             |          \  }}}n# t          $ r Y dS w xY w| j                            |           t          j        |           dS )NFT)r  r  r`   r   r  r!   r1   )r+   r   r  r  s       r   r  z&PidfdChildWatcher.remove_child_handler  sn    	/--c22KE1aa 	 	 	55	
!!%(((
ts   ! 
//N)r   r   r   r)   r  r  rv   r1   r  ry   r  r  r   r   r   r   r     s        	      B B B  
 
 
9 9 9) ) )&    r   r   c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	BaseChildWatcherc                 "    d | _         i | _        d S r   r  r   s    r   r)   zBaseChildWatcher.__init__  r  r   c                 0    |                      d            d S r   r  r   s    r   r1   zBaseChildWatcher.close  r  r   c                 F    | j         d uo| j                                         S r   r  r   s    r   rv   zBaseChildWatcher.is_active  r  r   c                     t                      r   r  )r+   expected_pids     r   _do_waitpidzBaseChildWatcher._do_waitpid      !###r   c                     t                      r   r  r   s    r   _do_waitpid_allz BaseChildWatcher._do_waitpid_all  r  r   c                 8   | j         #|!| j        rt          j        dt                     | j         $| j                             t          j                   || _         |;|                    t          j        | j	                   | 
                                 d S d S r  )r   r  r6   r7   r  r5   rI   SIGCHLDrZ   	_sig_chldr  r  s     r   r  zBaseChildWatcher.attach_loop  s     :!dltlM=     
 :!J,,V^<<<
##FNDNCCC   """"" r   c                     	 |                                   d S # t          t          f$ r  t          $ r(}| j                            d|d           Y d }~d S d }~ww xY w)N$Unknown exception in SIGCHLD handler)r<  r=  )r  r|   r}   r~   r   r?  rC  s     r   r  zBaseChildWatcher._sig_chld  s    	  """""-. 	 	 	 	 	 	 J--A / /         		s    AAAN)
r   r   r   r)   r1   rv   r  r  r  r  r   r   r   r  r    s            B B B$ $ $$ $ $# # #(    r   r  c                   D     e Zd Z	  fdZd Zd Zd Zd Zd Zd Z	 xZ
S )r   c                 z    | j                                          t                                                       d S r   )r  r9   r(   r1   r+   r-   s    r   r1   zSafeChildWatcher.close  s,    r   c                     | S r   r   r   s    r   r  zSafeChildWatcher.__enter__   r  r   c                     d S r   r   r  s       r   r  zSafeChildWatcher.__exit__#  r  r   c                 H    ||f| j         |<   |                     |           d S r   )r  r  r  s       r   ry   z"SafeChildWatcher.add_child_handler&  s/     ($/ 	r   c                 :    	 | j         |= dS # t          $ r Y dS w xY wNTFr  r`   r  s     r   r  z%SafeChildWatcher.remove_child_handler,  8    	$4 	 	 	55	    
c                 ^    t          | j                  D ]}|                     |           d S r   r4   r  r  r  s     r   r  z SafeChildWatcher._do_waitpid_all3  s<    (( 	" 	"CS!!!!	" 	"r   c                    	 t          j        |t           j                  \  }}|dk    rd S t          |          }| j                                        rt          j        d||           n)# t          $ r |}d}t          j	        d|           Y nw xY w	 | j
                            |          \  }} |||g|R   d S # t          $ r7 | j                                        rt          j	        d|d           Y d S Y d S w xY w)Nr   $process %s exited with returncode %sr  8Unknown child process pid %d, will report returncode 255'Child watcher got an unexpected pid: %rTr:  )r!   r  WNOHANGr"   r   r  r   r  r  r`  r  r  r`   )r+   r  r   r$   r   rU   rV   s          r   r  zSafeChildWatcher._do_waitpid8  so   	7*\2:>>KC axx/77Jz##%% 7C):7 7 7 ! 	 	 	 CJNJ    	$		-!_0055NHd HS*,t,,,,,,  	3 	3 	3 z##%% 3H"T3 3 3 3 3 3 33 3 3	3s#   "A+ +#BBB> >:C?>C?)r   r   r   r1   r  r  ry   r  r  r  r   r   s   @r   r   r     s                    " " "
 -  -  -  -  -  -  -r   r   c                   H     e Zd Z	  fdZ fdZd Zd Zd Zd Zd Z	 xZ
S )r   c                     t                                                       t          j                    | _        i | _        d| _        d S r   )r(   r)   	threadingLock_lock_zombies_forksr  s    r   r)   zFastChildWatcher.__init__e  s:    ^%%
r   c                     | j                                          | j                                         t                                                       d S r   )r  r9   r  r(   r1   r  s    r   r1   zFastChildWatcher.closek  s@    r   c                 h    | j         5  | xj        dz  c_        | cd d d            S # 1 swxY w Y   d S )Nr   )r  r  r   s    r   r  zFastChildWatcher.__enter__p  s    Z 	 	KK1KK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   '++c                     | j         5  | xj        dz  c_        | j        s| j        s	 d d d            d S t          | j                  }| j                                         d d d            n# 1 swxY w Y   t          j        d|           d S )Nr   z5Caught subprocesses termination from unknown pids: %s)r  r  r  rO   r9   r   r`  )r+   r  r  r  collateral_victimss        r   r  zFastChildWatcher.__exit__v  s    Z 	" 	"KK1KK{ $- 		" 	" 	" 	" 	" 	" 	" 	" "%T]!3!3M!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	C	  	  	  	  	 s    A.-A..A25A2c                     | j         5  	 | j                            |          }n(# t          $ r ||f| j        |<   Y d d d            d S w xY w	 d d d            n# 1 swxY w Y    |||g|R   d S r   )r  r  r  r`   r  )r+   r   rU   rV   r   s        r   ry   z"FastChildWatcher.add_child_handler  s     Z 	 	!]..s33

   '/~$	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	j(4((((((s0   A%AA
A	A

AA!Ac                 :    	 | j         |= dS # t          $ r Y dS w xY wr  r  r  s     r   r  z%FastChildWatcher.remove_child_handler  r  r  c                 ~   	 	 t          j        dt           j                  \  }}|dk    rd S t          |          }n# t          $ r Y d S w xY w| j        5  	 | j                            |          \  }}| j        	                                rt          j        d||           n_# t          $ rR | j        rF|| j        |<   | j        	                                rt          j        d||           Y d d d            d }Y nw xY wd d d            n# 1 swxY w Y   |t          j        d||           n
 |||g|R   =)NTr@   r   r  z,unknown process %s exited with returncode %sz8Caught subprocess termination from unknown pid: %d -> %d)r!   r  r  r"   r  r  r  r  r   r  r   r  r`   r  r  r`  )r+   r   r$   r   rU   rV   s         r   r  z FastChildWatcher._do_waitpid_all  s   %	1
< jRZ88V
 !88F3F;;

 %     6 66%)_%8%8%=%=NHd z++-- 6%K%(*6 6 6   
$ 
$ 
${ !-7c*://11 :"L *>),j: : : !6 6 6 6 6 6 6  $HHH
$6 6 6 6 6 6 6 6 6 6 6 6 6 6 6&  #Z1 1 1 1 j040000K%	1sR   "= 
A
ADB$40D$A
D .D;D =D?D  DDD)r   r   r   r)   r1   r  r  ry   r  r  r   r   s   @r   r   r   [  s                
       ) ) )  (1 (1 (1 (1 (1 (1 (1r   r   c                   R    e Zd Z	 d Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd ZdS )r   c                 "    i | _         d | _        d S r   )r  _saved_sighandlerr   s    r   r)   zMultiLoopChildWatcher.__init__  s    !%r   c                     | j         d uS r   )r  r   s    r   rv   zMultiLoopChildWatcher.is_active  s    %T11r   c                    | j                                          | j        d S t          j        t          j                  }|| j        k    rt          j        d           n$t          j        t          j        | j                   d | _        d S )Nz+SIGCHLD handler was changed by outside code)	r  r9   r  rI   	getsignalr  r  r   r`  )r+   rd   s     r   r1   zMultiLoopChildWatcher.close  s|    !)F"6>22dn$$NHIIIIM&.$*@AAA!%r   c                     | S r   r   r   s    r   r  zMultiLoopChildWatcher.__enter__  r  r   c                     d S r   r   r+   r  exc_valexc_tbs       r   r  zMultiLoopChildWatcher.__exit__  r  r   c                 p    t          j                    }|||f| j        |<   |                     |           d S r   )r   get_running_loopr  r  )r+   r   rU   rV   r   s        r   ry   z'MultiLoopChildWatcher.add_child_handler  s?    &(( $h5 	r   c                 :    	 | j         |= dS # t          $ r Y dS w xY wr  r  r  s     r   r  z*MultiLoopChildWatcher.remove_child_handler  r  r  c                     | j         d S t          j        t          j        | j                  | _         | j         %t	          j        d           t          j        | _         t          j        t          j        d           d S )NzaPrevious SIGCHLD handler was set by non-Python code, restore to default handler on watcher close.F)r  rI   r  r  r   r`  rc   rQ   r  s     r   r  z!MultiLoopChildWatcher.attach_loop  sw    
 !-F!'v~t~!N!N!)N J K K K%+^D" 	FNE22222r   c                 ^    t          | j                  D ]}|                     |           d S r   r  r  s     r   r  z%MultiLoopChildWatcher._do_waitpid_all  s<    (( 	" 	"CS!!!!	" 	"r   c                 4   	 t          j        |t           j                  \  }}|dk    rd S t          |          }d}n+# t          $ r |}d}t          j        d|           d}Y nw xY w	 | j                            |          \  }}}|	                                rt          j        d||           d S |r*|
                                rt          j        d||            |j        |||g|R   d S # t          $ r t          j        d|d	           Y d S w xY w)
Nr   Tr  r  F%Loop %r that handles pid %r is closedr  r  r:  )r!   r  r  r"   r  r   r`  r  r  	is_closedr  r  r   r`   )	r+   r  r   r$   r   	debug_logr   rU   rV   s	            r   r  z!MultiLoopChildWatcher._do_waitpid  s   	*\2:>>KC axx/77JII ! 	 	 	 CJNJ   III	 	L#'?#6#6s#;#; D(D ~~ LFcRRRRR ;!1!1 ;L!G!-z; ; ;))(CKdKKKKKK  	/ 	/ 	/ ND/ / / / / / /	/s!   "> %A&%A&*C2 2!DDc                     	 |                                   d S # t          t          f$ r  t          $ r t	          j        dd           Y d S w xY w)Nr  Tr:  )r  r|   r}   r~   r   r`  )r+   r   r   s      r   r  zMultiLoopChildWatcher._sig_chld8  sy    	R  """""-. 	 	 	 	R 	R 	RNADQQQQQQQ	Rs    1AAN)r   r   r   r)   rv   r1   r  r  ry   r  r  r  r  r  r   r   r   r   r     s        	$& & &2 2 2
& 
& 
&        3 3 3"" " "#L #L #LJR R R R Rr   r   c                   `    e Zd Z	 d Zd Zd Zd Zd Zd Ze	j
        fdZd Zd	 Zd
 Zd ZdS )r   c                 F    t          j        d          | _        i | _        d S r   )	itertoolsr   _pid_counter_threadsr   s    r   r)   zThreadedChildWatcher.__init__N  s    %OA..r   c                     dS rB  r   r   s    r   rv   zThreadedChildWatcher.is_activeR  rk  r   c                 .    |                                   d S r   )_join_threadsr   s    r   r1   zThreadedChildWatcher.closeU  s    r   c                     	 d t          | j                                                  D             }|D ]}|                                 d S )Nc                 H    g | ]}|                                 |j        | S r   )is_alivedaemon.0threads     r   
<listcomp>z6ThreadedChildWatcher._join_threads.<locals>.<listcomp>Z  s@     ? ? ?foo''?06?6 ? ? ?r   )r4   r  r  r  )r+   threadsr  s      r   r	  z"ThreadedChildWatcher._join_threadsX  s`    3? ?T]-A-A-C-C(D(D ? ? ? 	 	FKKMMMM	 	r   c                     | S r   r   r   s    r   r  zThreadedChildWatcher.__enter___  r  r   c                     d S r   r   r  s       r   r  zThreadedChildWatcher.__exit__b  r  r   c                     d t          | j                                                  D             }|r || j         dt          |            d S d S )Nc                 :    g | ]}|                                 |S r   )r  r  s     r   r  z0ThreadedChildWatcher.__del__.<locals>.<listcomp>f  s6     ) ) )foo'')6 ) ) )r   z0 has registered but not finished child processesr/   )r4   r  r  r-   r8   )r+   r4  r  s      r   r5  zThreadedChildWatcher.__del__e  s}    ) )T]-A-A-C-C(D(D ) ) ) 	ET^UUU!     	 	r   c                     t          j                    }t          j        | j        dt          | j                   ||||fd          }|| j        |<   |                                 d S )Nzwaitpid-T)targetnamerV   r  )	r   r  r  Threadr  nextr  r  start)r+   r   rU   rV   r   r  s         r   ry   z&ThreadedChildWatcher.add_child_handlerm  sp    &((!)9'K$t7H2I2I'K'K(,c8T'B)-/ / / $cr   c                     dS rB  r   r  s     r   r  z)ThreadedChildWatcher.remove_child_handlerv  s	     tr   c                     d S r   r   r  s     r   r  z ThreadedChildWatcher.attach_loop|  r  r   c                    	 t          j        |d          \  }}t          |          }|                                rt	          j        d||           n)# t          $ r |}d}t	          j        d|           Y nw xY w|                                rt	          j        d||           n |j	        |||g|R   | j
                            |           d S )Nr   r  r  r  r  )r!   r  r"   r  r   r  r  r`  r  r   r  r  )r+   r   r  rU   rV   r   r$   r   s           r   r  z ThreadedChildWatcher._do_waitpid  s   	7*\155KC 077J~~ 7C):7 7 7 ! 	 	 	 CJNJ    	 >> 	HNBD#NNNN%D%hZG$GGGG,'''''s   A #A:9A:N)r   r   r   r)   rv   r1   r	  r  r  r6   r7   r5  ry   r  r  r  r   r   r   r   r   A  s        
             %M          ( ( ( ( (r   r   c                   @     e Zd Z	 eZ fdZd Z fdZd Zd Z	 xZ
S )_UnixDefaultEventLoopPolicyc                 V    t                                                       d | _        d S r   )r(   r)   _watcherr  s    r   r)   z$_UnixDefaultEventLoopPolicy.__init__  s$    r   c                    t           j        5  | j        ]t                      | _        t	          j                    t	          j                    u r$| j                            | j        j	                   d d d            d S # 1 swxY w Y   d S r   )
r   r  r#  r   r  current_threadmain_threadr  _localr   r   s    r   _init_watcherz)_UnixDefaultEventLoopPolicy._init_watcher  s    \ 	A 	A}$ 4 6 6+--1F1H1HHHM--dk.?@@@		A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	As   A%A??BBc                     	 t                                          |           | j        Bt          j                    t          j                    u r| j                            |           d S d S d S r   )r(   set_event_loopr#  r  r%  r&  r  )r+   r   r-   s     r   r*  z*_UnixDefaultEventLoopPolicy.set_event_loop  sq    	 	t$$$M%(**i.C.E.EEEM%%d+++++ &%EEr   c                 H    	 | j         |                                  | j         S r   )r#  r(  r   s    r   ru   z-_UnixDefaultEventLoopPolicy.get_child_watcher  s+    	 =    }r   c                 V    	 | j         | j                                          || _         d S r   )r#  r1   )r+   r   s     r   set_child_watcherz-_UnixDefaultEventLoopPolicy.set_child_watcher  s.    2 =$M!!!r   )r   r   r   r&   _loop_factoryr)   r(  r*  ru   r-  r   r   s   @r   r!  r!    s        D*M    A A A, , , , ,               r   r!  )2rS   r   r  r!   r  rI   r   r   r}  r2   r  r6    r   r   r   r   r   r	   r
   r   r   r   logr   __all__rP  ImportErrorr   r"   BaseSelectorEventLoopr&   ReadTransportrj   _FlowControlMixinWriteTransportrr   BaseSubprocessTransportrx   r   r   r  r   r   r   r   BaseDefaultEventLoopPolicyr!  r   r   r   r   r   <module>r9     s   8  				     				            



                                                                        <7
+C
D
DD	 	 	
  N" N" N" N" N"_B N" N" N"bM M M M MZ5 M M M`J J J J Jj:(7J J JZ         F      0L$ L$ L$ L$ L$ L$ L$ L$^K K K K K, K K K\2 2 2 2 2+ 2 2 2jG- G- G- G- G-' G- G- G-Tf1 f1 f1 f1 f1' f1 f1 f1RzR zR zR zR zR0 zR zR zRzV( V( V( V( V(/ V( V( V(r/  /  /  /  / &"C /  /  / d + 4   r   