
    <|ha                        d Z ddlmZ ddlmZ ddlmZ ddlZg Z	g Z
eaej                  Zej                  Zd Zd Zd ZddlZd	ej$                  j                  v r= eed
      r4eej$                  _        e	j)                  d       e	j)                  d       n"e
j)                  d       e
j)                  d        ee e       e	e
z   d      Ze	e
z   Zy)aj  
Cooperative implementation of special cases of :func:`signal.signal`.

This module is designed to work with libev's child watchers, as used
by default in :func:`gevent.os.fork` Note that each ``SIGCHLD``
handler will be run in a new greenlet when the signal is delivered
(just like :class:`gevent.hub.signal`)

The implementations in this module are only monkey patched if
:func:`gevent.os.waitpid` is being used (the default) and if
:const:`signal.SIGCHLD` is available; see :func:`gevent.os.fork` for
information on configuring this not to be the case for advanced uses.

.. versionadded:: 1.1b4
.. versionchanged:: 1.5a4
   Previously there was a backwards compatibility alias
   ``gevent.signal``, introduced in 1.1b4, that partly shadowed this
   module, confusing humans and static analysis tools alike. That alias
   has been removed. (See `gevent.signal_handler`.)
    )absolute_import)_NONE)copy_globalsNc                     | t         j                  k7  rt        |       S t        t        u rt        t         j                        at        S )z
    Exactly the same as :func:`signal.getsignal` except where
    :const:`signal.SIGCHLD` is concerned.

    For :const:`signal.SIGCHLD`, this cooperates with :func:`signal`
    to provide consistent answers.
    )_signalSIGCHLD_signal_getsignal_child_handler_INITIAL)	signalnums    L/var/www/html/test/engine/venv/lib/python3.12/site-packages/gevent/signal.py	getsignalr   '   s9     GOO# ++ !*7??;    c                 |   | t         j                  k7  rt        | |      S |t         j                  k7  r)|t         j                  k7  rt        |      st        d      t        |       }|a|t         j                  t         j                  fv r1ddl	m
} t        | |        |       j                  j                          |S )aq  
    Exactly the same as :func:`signal.signal` except where
    :const:`signal.SIGCHLD` is concerned.

    .. note::

       A :const:`signal.SIGCHLD` handler installed with this function
       will only be triggered for children that are forked using
       :func:`gevent.os.fork` (:func:`gevent.os.fork_and_watch`);
       children forked before monkey patching, or otherwise by the raw
       :func:`os.fork`, will not trigger the handler installed by this
       function. (It's unlikely that a SIGCHLD handler installed with
       the builtin :func:`signal.signal` would be triggered either;
       libev typically overwrites such a handler at the C level. At
       the very least, it's full of race conditions.)

    .. note::

        Use of ``SIG_IGN`` and ``SIG_DFL`` may also have race conditions
        with libev child watchers and the :mod:`gevent.subprocess` module.

    .. versionchanged:: 1.2a1
         If ``SIG_IGN`` or ``SIG_DFL`` are used to ignore ``SIGCHLD``, a
         future use of ``gevent.subprocess`` and libev child watchers
         will once again work. However, on Python 2, use of ``os.popen``
         will fail.

    .. versionchanged:: 1.1rc2
         Allow using ``SIG_IGN`` and ``SIG_DFL`` to reset and ignore ``SIGCHLD``.
         However, this allows the possibility of a race condition if ``gevent.subprocess``
         had already been used.
    zKsignal handler must be signal.SIG_IGN, signal.SIG_DFL, or a callable objectr   )get_hub)r   r   _signal_signalSIG_IGNSIG_DFLcallable	TypeErrorr   r
   
gevent.hubr   loopreset_sigchld)r   handlerold_handlerr   s       r   signalr   9   s    B GOO#i11
 '//!g&@RYIZeffI&KN7??GOO44
 	'y'*	$$&r   c                      t        t              r3ddlm}   | t        t        j
                  d       }|j                          y y )Nr   )Greenlet)r   r
   geventr   r   r   switch)r   greenlets     r   _on_child_hookr"   r   s0     #NGOOTB	  r   waitpidr   r   r    )names_to_ignoredunder_names_to_keep)__doc__
__future__r   gevent._utilr   r   r   r   r   __implements____extensions__r
   r   r   r	   r"   	gevent.osr   oshasattrappendglobals__imports____all__r$   r   r   <module>r3      s   * ' * %  %% $6r  		(((WWi-H  .FII(#+& (#+&7GI+9N+J024 >
)r   