o
    0׾gF                     @   s   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d Zdd	 Zd
d ZddlZdejj	v rNeedrNeej_e	d	 e	d n
e
d	 e
d eee e	e
 ddZe	e
 ZdS )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                 C   s(   | t jk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)	signalnum r   W/var/www/html/backend_erp/backend_erp_env/lib/python3.10/site-packages/gevent/signal.py	getsignal'   s
   

r   c                 C   sz   | t jkr
t| |S |t jkr|t jkrt|stdt| }|a|t jt jfv r;ddl	m
} t| | | 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   r   r   r   signal9   s   
!

r   c                  C   s2   t trddlm}  | ttjd }|  d S d S )Nr   )Greenlet)r   r   geventr   r   r   switch)r   greenletr   r   r   _on_child_hookr   s
   r   waitpidr   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   r   <module>   s2    9


