
    <|hk                        d Z ddlmZmZ ddlZddlmZ ddlmZ ddlm	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 ej6                  Zej8                  Zg Z G d de      Z eeeeg d      Z ddlm!Z! e!Z"ddlm#Z$ e$jJ                  Z%ejL                  Z'ejP                  Z)d Z*d Z+d Z,ej[                           ee       G d de             Z.y)z
libuv loop implementation
    )absolute_importprint_functionN)defaultdict)
namedtupledelitem)implementer)
getcurrent)LoopExit)_dbg)AbstractLoop)assign_standard_callbacks)AbstractCallbacks)ILoop)	_corecffic                   $    e Zd Zd Zd Zd Zd Zy)
_Callbacksc                 l    t         j                  d|      j                  }|r| j                  |      S d S Nzuv_handle_t*)fficastdatafrom_handle)selfwatcher_ptrloop_handles      P/var/www/html/test/engine/venv/lib/python3.12/site-packages/gevent/libuv/loop.py_find_loop_from_c_watcherz$_Callbacks._find_loop_from_c_watcher"   s0    hh~{;@@0;t,EE    c                 ~    | j                  t        j                  d|      j                        j	                          y r   )r   r   r   r   _sigchld_callback)r   r   _signums      r   python_sigchld_callbackz"_Callbacks.python_sigchld_callback&   s*    .+>CCDVVXr   c                 $    | j                  |      S N)python_prepare_callback)r   r   s     r   python_timer0_callbackz!_Callbacks.python_timer0_callback)   s    ++K88r   c                 v    |j                   }| j                  |      }|j                  j                  ||       y r%   )r   r   loop_queue_callback)r   r   reventswatcher_handlethe_watchers        r   python_queue_callbackz _Callbacks.python_queue_callback,   s3    $))&&~6((g>r   N)__name__
__module____qualname__r   r#   r'   r.    r   r   r   r       s    FY9?r   r   )r#   r'   r.   )EVENTS)watcherc                      t         j                  t        j                               } t	        | t
              s| j                  d      }d|z   S | }d|z   S )Nasciizlibuv-)r   stringlibuvuv_version_string
isinstancestrdecode)uv_bytesuv_strs     r   get_versionr?   F   sP    zz%1134Hh$) f fr   c                  f    dt         j                  t         j                  t         j                  fz  S )Nzlibuv-%d.%d.%d)r8   UV_VERSION_MAJORUV_VERSION_MINORUV_VERSION_PATCHr2   r   r   get_header_versionrD   P   s&    u55u7M7MuOeOefffr   c                      dgS )Ndefaultr2   r2   r   r   supported_backendsrG   S   s
    ;r   c                   ^    e Zd ZdZ eej                  d      ZdZdZdZ	dZ
dZe	Zd,dZd	 Zd
 ZdZed        Zd Zd Z fdZd Zd Zd Zd Z fdZd Zd Zd Zd Z edg d      Z d Z!d Z"d Z#d-dZ$d Z%dZ&d  Z'd.d!Z(d" Z)d# Z*d$ Z+dZ,dZ-d% Z.d& Z/d' Z0d( Z1d) Z2d/d*Z3d/d+Z4 xZ5S )0r)   gMbP?d   i,  Nzuv_check_t *zuv_prepare_t *zvoid(*)(void*)c                 0   t        j                  | t        t        t        ||       t        t              | _        i | _        t               | _
        t        j                         | _        | j                  t        j                         k(  | _        g | _        y r%   )r   __init__r   r8   	_watchersr   list_child_watchers_io_watchersset_fork_watchersosgetpid_pid_ptruv_default_loop_default_queued_callbacks)r   flagsrF   s      r   rK   zloop.__init__q   sg    dC	5'J*40!eIIK	e&;&;&==!#r   c                 >    | j                   j                  ||f       y r%   )rX   append)r   r   r+   s      r   r*   zloop._queue_callback{   s    %%{G&<=r   c                     |d}|rt         j                         }nt         j                         }|st        d      | j                  |_        |S )NTzFailed to get loop)r8   rV   uv_loop_newSystemError_handle_to_selfr   )r   rY   rF   ptrs       r   
_init_loopzloop._init_loop~   sT    ?G
  '')C##%C 233 ''
r   c                     | j                   sy | j                   r| j                   j                  sd | _         | j                   S r%   )rU   r   r   s    r   r`   zloop.ptr   s0    yy99TYY^^ DIyyr   c                    t         j                  | j                  | j                         t         j	                  | j                  t         j
                         t         j                  | j                         t        j                  d      | _	        t         j                  | j                  | j                         | j                  | j                  _        t        j                  dt         j
                        }t         j                  | j                  || j                  | j                         t         j                  | j                         y )Nzuv_timer_t*zvoid(*)(uv_timer_t*))r8   uv_check_initr`   _checkuv_check_startpython_check_callbackuv_unrefr   new_signal_idleuv_timer_initr_   r   r   uv_timer_startSIGNAL_CHECK_INTERVAL_MS)r   sig_cbs     r   _init_and_start_checkzloop._init_and_start_check   s    DHHdkk2T[[%*E*EFt{{#  GGM2DHHd&7&78!%!5!50%2M2MNT..#!::!::	< 	t(()r   c                 v    | j                   s-t               j                  j                  t	        d             y y )NzDestroyed during run)r`   r
   parentthrowr   rc   s    r   __check_and_diezloop.__check_and_die   s,    xx L%%h/E&FG r   c                 
   | j                          t        j                         }|| j                  k7  r(|| _        | j                  D ]  }|j                           | j                         | _        t        t        | +          y r%   )_loop__check_and_dierR   rS   rT   rQ   _on_fork_loop__run_queued_callbacks_prepare_ran_callbackssuperr)   _run_callbacks)r   curpidr4   	__class__s      r   r{   zloop._run_callbacks   sn    TYYDI.. #  "#0 '+&A&A&C#dD(*r   c                     t         j                  | j                  | j                         t         j	                  | j                  t         j
                         t         j                  | j                         y r%   )r8   uv_prepare_initr`   _prepareuv_prepare_startr&   ri   rc   s    r   _init_and_start_preparezloop._init_and_start_prepare   sD    dhh6t}}e.K.KLt}}%r   c                 X    t         j                  | j                  | j                         y r%   )r8   re   r`   _timer0rc   s    r   _init_callback_timerzloop._init_callback_timer   s    DHHdll3r   c                 B    t         j                  | j                         y r%   )r8   uv_check_stopr   rc   s    r   _stop_callback_timerzloop._stop_callback_timer   s    DLL)r   c                 `    t         j                  | j                  t         j                         y r%   )r8   rg   r   r'   rc   s    r   _start_callback_timerzloop._start_callback_timer   s    l 	T\\5+G+GHr   c                 0   t         t        |           | j                  sJ | j                  sJ | j
                  sJ t        j                  | j                         t        j                  | j                         t        j                  | j                         t        j                  | j                         t        j                  | j
                         t        j                  | j
                         t        j                  | j                         y r%   )rz   r)   _stop_aux_watchersr   rf   rk   r8   uv_prepare_stopuv_refr   uv_timer_stopr   )r   r}   s    r   r   zloop._stop_aux_watchersL  s    dD,.}}}{{{    dmm,T]]#DKK(T[[!D--.T&&'DLL)r   c                 b    | j                          t        j                  | j                         y r%   )r   r8   r   r   rc   s    r   _setup_for_run_callbackzloop._setup_for_run_callback\  s    ""$T\\"r   c                     |S r%   r2   )r   r`   s     r   _can_destroy_loopzloop._can_destroy_loop`  s    
r   c                    d}|rt         j                  |      }|sy |t         j                  k7  rt        d|      t         j	                  |t         j
                        }|r$t         j	                  |t         j                         |ry y )N   zUnknown close failure reason)r8   uv_loop_closeUV_EBUSYr^   uv_runUV_RUN_ONCEUV_RUN_NOWAIT)r   r`   closed_failedran_has_more_callbackss       r   __close_loopzloop.__close_loopc  so    !//4M .!"@-PP &+\\#u7H7H%I"%S%"5"56 r   c                    |j                   }t        j                  |_         	 |r*t        j	                  |       t        j                  |       t        j                  |_         	 |r| j                  |       |rt        j                  | j                         t        j                  | j                         t        j                  | j                         t        j                  | j                         t        j                  |       | `| `| `| `	| `| `| `y # t        j                  |_         w xY w# |rt        j                  | j                         t        j                  | j                         t        j                  | j                         t        j                  | j                         t        j                  |       | `| `| `| `	| `| `| `w xY wr%   )r   r   NULLr8   uv_stopgevent_close_all_handles_loop__close_loopgevent_zero_checkrf   r   gevent_zero_preparer   gevent_zero_timerrk   gevent_zero_looprO   rQ   rN   )r   r`   r   s      r   _destroy_loopzloop._destroy_loopt  sw   
 xx88	 c"..s3xxCH	%!!#& ''4''5))$--8''(9(9:&&s+! !#$3 xxCH ''4''5))$--8''(9(9:&&s+! !#$s   ,D %D4 D14B#GHandleState)handletyper4   refactiveclosingc                     | j                   sdgS | j                  g fd}t        j                  | j                   t        j                  d|      t        j                         S )zL
        Return all the handles that are open and their ref status.
        zLoop has been destroyedc                 \   | j                   }|rt        j                  |      }nd }j                   | t        j	                  t
        j                  | j                              |t
        j                  |       t
        j                  |       t
        j                  |                    y r%   )r   r   r   r[   r7   r8   uv_handle_type_namer   
uv_has_refuv_is_activeuv_is_closing)r   _argr   r4   handle_statehandless       r   walkzloop.debug.<locals>.walk  s    ;;D//$/NN<(+

53L3LV[[3Y(Z(/(-(8(8(@(-(:(:6(B(-(;(;F(CE Fr   zvoid(*)(uv_handle_t*,void*))r`   _HandleStater8   uv_walkr   callbackr   )r   r   r   r   s     @@r   debugz
loop.debug  s_     xx-..((	F 	dhhll#@#')hh	  r   c                      y r%   r2   rc   s    r   r   zloop.ref  s    r   c                      y r%   r2   rc   s    r   unrefz
loop.unref  s    r   c                 \    | j                   r t        j                  | j                          y y r%   )r`   r8   r   )r   hows     r   break_zloop.break_  s    88MM$((# r   c                 B    t         j                  | j                         y r%   )r8   uv_loop_forkr`   rc   s    r   reinitzloop.reinit  s    , 	488$r   Fc                    | j                   sy| j                   d d  }| j                   d d = |D ]  \  }}|j                  }|st        j                  |      rJ ,t        j                  ||      }|dk(  rt        j                  ||       ^|dk(  sdt        j                  |      rz|j                  }	 |r||k(  rt        j                  |       t        j                  |_         y# t        j                  |_        w xY w)NFr   T)
rX   r   r8   r   
_callbackspython_callbackpython_handle_errorpython_stopr   r   )r   cbsr   argr   valhandle_after_callbacks          r   __run_queued_callbackszloop.__run_queued_callbacks  s    %%$$Q'""1% # 	4K %%F --k:::,,VS9Cby..vs;))+6 -8,<,<)405Jf5T&223HI+.88(/	40  ,/88(s   5C))D c                    t         j                  }|rt         j                  }|rt         j                  }|t         j                  k(  r| j                  r| j                  j
                  r| j                          d| _        | j                  s| j                  st         j                  nt         j                  }t         j                  | j                  |      }| j                         }|s|s| j                  s|S | j                  r| j                  j
                  ryt         j                  | j                  |      }| j                          |S )NFr   )r8   UV_RUN_DEFAULTr   r   rU   r   r{   ry   r   rX   r   rx   )r   nowaitoncemoderun_mode
ran_statusran_callbacksresults           r   runzloop.run  s    ##$$D&&D5'''))		 ##%.3+  ??43I3I %%,,  #\\$))X>

 !% ; ; =!-@[@[ &%S ))		T dii.##%r   c                 j    | j                          t        j                  | j                        }|dz  S )Ng     @@)rv   r8   uv_nowr`   )r   nows     r   r   zloop.nowA  s,     ll488$V|r   c                 b    | j                          t        j                  | j                         y r%   )rv   r8   uv_update_timer`   rc   s    r   
update_nowzloop.update_nowI  s     TXX&r   c                 j    | j                   r't        j                  | j                        }|dk\  r|S y y Nr   )r`   r8   uv_backend_fdrU   )r   fds     r   filenozloop.filenoM  s3    88$$TYY/BQw	  r   c                    | j                   sy | j                  ry t        j                  d      | _        t        j                  | j                  | j                         | j                  | j                  _        t        j                  | j                         t        j                  | j                  t        j                  t        j                         y )Nzuv_signal_t*)rF   _sigchld_watcherr   rj   r8   uv_signal_initr`   r_   r   ri   uv_signal_startr#   signalSIGCHLDrc   s    r   install_sigchldzloop.install_sigchldV  s    ||   # 7TXXt'<'<=%)%9%9"t,,-d33#;;$nn	.r   c                     | j                   r| j                  sy t        j                  | j                         t        j
                  j                  | j                         | `y r%   )rF   r   r8   uv_signal_stoprL   r4   _watcher_ffi_closerc   s    r   reset_sigchldzloop.reset_sigchldg  sJ    ||4#8#8T223 	,,T-B-BC!r   c                 X   	 	 t        j                  t         j                        \  }}}|dk(  ry | j                  j                  |g       | j                  j                  dg       z   }|D ]  }| j                  |j                  ||       ! g | j                  d<   # t        $ r Y y w xY wr   )rR   wait3WNOHANGOSErrorrN   getrun_callback_set_waitpid_status)r   pidstatus_usagechildren_watchersr4   s         r   r!   zloop._sigchld_callbacks  s     &(hhrzz&:#VV
 ax $ 4 4 8 8b ADDXDXD\D\]^`bDc c, L!!'"="=sFKL ')D  #   s   'B 	B)(B)c                 T    | j                   |j                     j                  |       y r%   )rN   rT   r[   )r   r4   s     r   _register_child_watcherzloop._register_child_watcher  s    W\\*11':r   c                     	 | j                   |j                     j                  |       t	        | j                         D ]  }| j                   |   r| j                   |= ! y # t        $ r Y Cw xY wr%   )rN   rT   remove
ValueErrorrM   )r   r4   r   s      r   _unregister_child_watcherzloop._unregister_child_watcher  sp    	  .55g> ,,- 	.C'',((-	.  		s   (A" "	A.-A.c                     | j                   	    }|j                  s
J d|z         	 |j                  |      S # t        $ r0 | j                  j	                  | d      }|<   fd|_        Y Iw xY w)Nz)IO Watcher %s unclosed but should be deadr   c                      t               S r%   r   )r   io_watcherss   r   <lambda>zloop.io.<locals>.<lambda>  s    7;3K r   )rO   _multiplex_watchersKeyErrorrL   io_no_more_watchers	multiplex)r   r   eventsr   priority
io_watcherr  s    `    @r   r  zloop.io  s    
 ''		L$RJ11m4_bl4lm1 ##F++  	L **4Q7J(KO+KJ(	Ls   = 6A65A6c                     t        d      )Nzhprepare watchers are not currently supported in libuv. If you need them, please contact the maintainers.)	TypeError)r   r   r  s      r   preparezloop.prepare  s      L M 	Mr   )NNr%   )FF)TN)6r/   r0   r1   approx_timer_resolutionmaxr   CALLBACK_CHECK_COUNTrn   error_handler_CHECK_POINTER_PREPARE_POINTER_PREPARE_CALLBACK_SIG_TIMER_POINTERrK   r*   ra   rk   propertyr`   rp   rv   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ry   rx   r   r   r   r   r   _sigchld_callback_ffir   r   r!   r   r   r  r  __classcell__)r}   s   @r   r)   r)   X   s.    $ |@@#F  #M#N',#N$>. L *8H +D&
4*VIr* #7"%%N m*+L<$%0 #D8t'  ."	")(;.,&Mr   r)   )/__doc__
__future__r   r   rR   collectionsr   r   operatorr   r   zope.interfacer	   geventr
   gevent.exceptionsr   gevent._ffir   gevent._ffi.loopr   r   r   gevent._interfacesr   gevent.libuvr   r   libr8   __all__r   r   r3   GEVENT_CORE_EVENTSr4   rL   _events_to_strUV_READABLEREADUV_WRITABLEWRITEr?   rD   rG   gevent_set_uv_allocr)   r2   r   r   <module>r/     s    7 	 # "   &  &  ) 6 . $ "mm?" ?& '

 $  -))g    UY	M< Y	M Y	Mr   