HEX
Server: Apache
System: Linux pdx1-shared-a1-38 6.6.104-grsec-jammy+ #3 SMP Tue Sep 16 00:28:11 UTC 2025 x86_64
User: mmickelson (3396398)
PHP: 8.1.31
Disabled: NONE
Upload Files
File: //usr/lib/python3/dist-packages/mercurial/thirdparty/__pycache__/selectors2.cpython-310.pyc
o

�]LbVk�@sdZddlmZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZejZej
Z
ze	jZWneyAe	j	ZYnwdZdZdZd	Zd
Zgd�ZdZdZdae�ZeeejfZed
gd��ZGdd�de
�Z dd�Z!Gdd�de�Z"e#ed�r�Gdd�de"�Z$e�%d�ej&r�Gdd�de�Z'Gdd�de$�Z(e�%d�e(Z$e#ed�r�Gdd�de"�Z)e�%d�e#ed�r�Gd d!�d!e"�Z*e�%d!�e#ed"�r�Gd#d$�d$e"�Z+e�%d$�e#ed%�r�Gd&d'�d'e"�Z,e�%d'�d(d)�Z-ej.d*kr�d+d,�Z/nd-d,�Z/d.d/�Z0dS)0z. Back-ported, durable, and portable selectors �)�absolute_importN�)�pycompatzSeth Michael Larsonz sethmichaellarson@protonmail.comz2.0.0�MITz3https://www.github.com/SethMichaelLarson/selectors2)�
EVENT_READ�EVENT_WRITE�SelectorKey�DefaultSelector�BaseSelector�r)�fileobj�fd�events�datac@s0eZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�_SelectorMappingz* Mapping of file objects to selector keys cCs
||_dS�N)�	_selector��self�selector�r�A/usr/lib/python3/dist-packages/mercurial/thirdparty/selectors2.py�__init__F�
z_SelectorMapping.__init__cC�t|jj�Sr)�lenr�
_fd_to_key�rrrr�__len__I�z_SelectorMapping.__len__cCs8z
|j�|�}|jj|WStytd�|���w�Nz{0!r} is not registered.)r�_fileobj_lookupr�KeyError�format)rrr
rrr�__getitem__Ls�z_SelectorMapping.__getitem__cCrr)�iterrrrrrr�__iter__Srz_SelectorMapping.__iter__N)�__name__�
__module__�__qualname__�__doc__rrr$r&rrrrrCsrc
Cs^t|t�r|}nzt|���}Wntttfy!td�|���w|dkr-td�|���|S)zl Return a file descriptor from a file object. If
    given an integer will simply return that integer back. zInvalid file object: {0!r}rzInvalid file descriptor: {0})�
isinstance�int�fileno�AttributeError�	TypeError�
ValueErrorr#)rr
rrr�_fileobj_to_fdWs
�r1c@sveZdZdZdd�Zdd�Zddd�Zd	d
�Zddd�Zdd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�ZdS)r
a/ Abstract Selector class

    A selector supports registering file objects to be monitored
    for specific I/O events.

    A file object is a file descriptor or any object with a
    `fileno()` method. An arbitrary object can be attached to the
    file object which can be used for example to store context info,
    a callback, etc.

    A selector can use various implementations (select(), poll(), epoll(),
    and kqueue()) depending on the platform. The 'DefaultSelector' class uses
    the most efficient implementation for the current platform.
    cCsi|_t|�|_dSr)rr�_maprrrrruszBaseSelector.__init__cCsDzt|�WSty!|j��D]}|j|ur|jYSq�w)aa Return a file descriptor from a file object.
        This wraps _fileobj_to_fd() to do an exhaustive
        search in case the object is invalid but we still
        have it in our map. Used by unregister() so we can
        unregister an object that was previously registered
        even if it is closed. It is also used by _SelectorMapping
        )r1r0r�valuesrr
�rr�keyrrrr!|s

��zBaseSelector._fileobj_lookupNcCsb|r	|ttB@rtd�|���t||�|�||�}|j|jvr)td�||j���||j|j<|S)z8 Register a file object for a set of events to monitor. zInvalid events: {0!r}z${0!r} (FD {1}) is already registered)	rrr0r#rr!r
rr"�rrrrr5rrr�register�s
�zBaseSelector.registerc
Cs�z|j�|�|��}W|Stytd�|���tjyQ}z+|jtjkr)�|j�	�D]}|j
|ur>|j�|j�nq.td�|���WYd}~|Sd}~ww)z0 Unregister a file object from being monitored. �{0!r} is not registeredN)r�popr!r"r#�socket�error�errno�EBADFr3rr
)rrr5�errrrr�
unregister�s$�
�
���zBaseSelector.unregistercCs~z
|j|�|�}Wntytd�|���w||jkr,|�|�|�|||�}|S||jkr=|j|d�}||j|j	<|S)z< Change a registered file object monitored events and data. r8)r)
rr!r"r#rr?r7r�_replacer
r6rrr�modify�s�


�zBaseSelector.modifycCst��)zj Perform the actual selection until some monitored file objects
        are ready or the timeout expires. )�NotImplementedError)r�timeoutrrr�select�szBaseSelector.selectcCs|j��d|_dS)zd Close the selector. This must be called to ensure that all
        underlying resources are freed. N)r�clearr2rrrr�close�s

zBaseSelector.closecCs@|��}|durtd��z||WStytd�|���w)z: Return the key associated with a registered file object. NzSelector is closedr8)�get_map�RuntimeErrorr"r#)rr�mappingrrr�get_key�s
�zBaseSelector.get_keycCs|jS)z3 Return a mapping of file objects to selector keys )r2rrrrrG�szBaseSelector.get_mapcCs"z|j|WStyYdSw)z_ Return the key associated to a given file descriptor
         Return None if it is not found. N)rr")rr
rrr�_key_from_fd�s
�zBaseSelector._key_from_fdcCs|Srrrrrr�	__enter__�szBaseSelector.__enter__cGs|��dSr)rF)r�_rrr�__exit__�rzBaseSelector.__exit__r)r'r(r)r*rr!r7r?rArDrFrJrGrKrLrNrrrrr
fs



r
rDc�NeZdZdZ�fdd�Zd
�fdd�	Z�fdd�Zd
d	d
�Zd
dd�Z�Z	S)�SelectSelectorz Select-based selector. cs"tt|���t�|_t�|_dSr)�superrPr�set�_readers�_writersr��	__class__rrr�szSelectSelector.__init__NcsDtt|��|||�}|t@r|j�|j�|t@r |j�|j�|Sr)	rQrPr7rrS�addr
rrTr6rUrrr7�szSelectSelector.registercs0tt|��|�}|j�|j�|j�|j�|Sr)rQrPr?rS�discardr
rTr4rUrrr?�szSelectSelector.unregisterc	Cs�t|j�st|j�sgS|durdnt|d�}g}t|jd|j|j|�\}}}t|�}t|�}||BD]%}d}||vr?|tO}||vrG|tO}|�	|�}|rX|�
|||j@f�q3|S)N�Tr)rrSrT�max�_syscall_wrapper�_wrap_selectrRrrrK�appendr)	rrC�ready�r�wrMr
rr5rrrrDs(
�
�zSelectSelector.selectcCst�||g|�S�z? Wrapper for select.select because timeout is a positional arg )rD�rr_r`rCrrrr\�zSelectSelector._wrap_selectr)
r'r(r)r*rr7r?rDr\�
__classcell__rrrUrrP�s
rPc@s(eZdZdZdd�Zdd�Zdd�ZdS)	�_JythonSelectorMappingz� This is an implementation of _SelectorMapping that is built
            for use specifically with Jython, which does not provide a hashable
            value from socket.socket.fileno(). cCst|t�sJ�||_dSr)r+�JythonSelectSelectorrrrrrr(s
z_JythonSelectorMapping.__init__cCrr)rr�_socketsrrrrr,rz_JythonSelectorMapping.__len__cCs0|jjD]\}}||ur|Sqtd�|���r )rrgr"r#)rr�sockr5rrrr$/s
�z"_JythonSelectorMapping.__getitem__N)r'r(r)r*rrr$rrrrre#s
recs<eZdZdZ�fdd�Zddd�Zdd�Zdd	d
�Z�ZS)rfaz This is an implementation of SelectSelector that is for Jython
            which works around that Jython's socket.socket.fileno() does not
            return an integer fd value. All SelectorKey.fd will be equal to -1
            and should not be used. This instead uses object id to compare fileobj
            and will only use select.select as it's the only selector that allows
            directly passing in socket objects rather than registering fds.
            See: http://bugs.jython.org/issue1678
                 https://wiki.python.org/jython/NewSocketModule#socket.fileno.28.29_does_not_return_an_integer
            cs>tt|���g|_t|�|_g|_g|_tt	dt	j	�|_
dS)N�cpython_compatible_select)rQrfrrgrer2rSrT�getattrrD�_select_funcrrUrrrAs
zJythonSelectSelector.__init__NcCsr|jD]\}}||urtd�||���qt|d||�}|j�||f�|t@r-|j�|�|t@r7|j�|�|S)Nz{0!r} is already registered���)	rgr"r#rr]rrSrrT)rrrrrhrMr5rrrr7Ls��zJythonSelectSelector.registercCsjt|j�D]\}\}}||urnqtd�|���|jt@r$|j�|�|jt@r/|j	�|�|j|=|Sr )
�	enumeratergr"r#rrrS�removerrT)rr�irhr5rrrr?[s�

zJythonSelectSelector.unregistercCs|�||g|�Sra)rkrbrrrr\jrcz!JythonSelectSelector._wrap_selectr)	r'r(r)r*rr7r?r\rdrrrUrrf6s

rf�pollcrO)�PollSelectorz Poll-based selector c�tt|���t��|_dSr)rQrqrrDrp�_pollrrUrrru�zPollSelector.__init__Nc�Ptt|��|||�}d}|t@r|tjO}|t@r|tjO}|j�|j	|�|S�Nr)
rQrqr7rrD�POLLINr�POLLOUTrsr
)rrrrr5�
event_maskrUrrr7y�

zPollSelector.registerc�"tt|��|�}|j�|j�|Sr)rQrqr?rsr
r4rUrrr?��zPollSelector.unregistercC�4|dur|dkrd}nt�|d�}|j�|�}|S�zj Wrapper function for select.poll.poll() so that
            _syscall_wrapper can work with only seconds. Nr��)�math�ceilrsrp�rrC�resultrrr�
_wrap_poll��zPollSelector._wrap_pollcC�tg}t|jd|d�}|D]+\}}d}|tj@r|tO}|tj@r&|tO}|�|�}|r7|�|||j	@f�q|S�NT)rCr�
r[r�rDrwrrxrrKr]r�rrCr^�	fd_eventsr
ryrr5rrrrD��
�zPollSelector.selectr)
r'r(r)r*rr7r?r�rDrdrrrUrrqss

rq�epollc�XeZdZdZ�fdd�Zdd�Zd�fdd�	Z�fd	d
�Zddd�Z�fd
d�Z	�Z
S)�
EpollSelectorz Epoll-based selector crrr)rQr�rrDr��_epollrrUrrr�rtzEpollSelector.__init__cC�
|j��Sr)r�r-rrrrr-�rzEpollSelector.filenoNcsTtt|��|||�}d}|t@r|tjO}|t@r|tjO}t|j	jd|j
|�|S)NrF)rQr�r7rrD�EPOLLINr�EPOLLOUTr[r�r
)rrrrr5�events_maskrUrrr7�s

zEpollSelector.registercs>tt|��|�}zt|jjd|j�W|StyY|Sw)NF)rQr�r?r[r�r
�_ERROR_TYPESr4rUrrr?�s��zEpollSelector.unregisterc	Cs�|dur|dkrd}n	t�|d�d}t|�}nd}tt|j�d�}g}t|jjd||d�}|D]+\}}d}|t	j
@rA|tO}|t	j@rK|t
O}|�|�}|r\|�|||j@f�q1|S)	NrrYrg����MbP?g�rT)rC�	maxevents)r�r��floatrZrrr[r�rprDr�rr�rrKr]r)	rrC�
max_eventsr^r�r
ryrr5rrrrD�s.

�
�zEpollSelector.selectc�|j��tt|���dSr)r�rFrQr�rrUrrrF��
zEpollSelector.closer�r'r(r)r*rr-r7r?rDrFrdrrrUrr��s

	!r��devpollcsbeZdZdZ�fdd�Zdd�Zd�fdd�	Z�fd	d
�Zddd�Zdd
d�Z	�fdd�Z
�ZS)�DevpollSelectorzSolaris /dev/poll selector.crrr)rQr�rrDr��_devpollrrUrrr�rtzDevpollSelector.__init__cCr�r)r�r-rrrrr-�rzDevpollSelector.filenoNcrurv)
rQr�r7rrDrwrrxr�r
)rrrrr5�poll_eventsrUrrr7�rzzDevpollSelector.registercr{r)rQr�r?r�r
r4rUrrr?r|zDevpollSelector.unregistercCr}r~)r�r�r�rpr�rrrr�r�zDevpollSelector._wrap_pollcCr�r�r�r�rrrrDr�zDevpollSelector.selectcr�r)r�rFrQr�rrUrrrF%r�zDevpollSelector.closer)r'r(r)r*rr-r7r?r�rDrFrdrrrUrr��s


r��kqueuecr�)�KqueueSelectorz  Kqueue / Kevent-based selector crrr)rQr�rrDr��_kqueuerrUrrr/rtzKqueueSelector.__init__cCr�r)r�r-rrrrr-3rzKqueueSelector.filenoNcs|tt|��|||�}|t@r#t�|jtjtj�}t	|j
jd|gdd�|t@r<t�|jtj
tj�}t	|j
jd|gdd�|S�NFr)rQr�r7rrD�keventr
�KQ_FILTER_READ�	KQ_EV_ADDr[r��controlr�KQ_FILTER_WRITE)rrrrr5r�rUrrr76s��zKqueueSelector.registercs�tt|��|�}|jt@r.t�|jtjtj	�}z
t
|jjd|gdd�Wn	t
y-Ynw|jt@rVt�|jtjtj	�}zt
|jjd|gdd�W|St
yUY|Sw|Sr�)rQr�r?rrrDr�r
r��KQ_EV_DELETEr[r�r�r�rr�)rrr5r�rUrrr?Hs0
��
���zKqueueSelector.unregistercCs�|dur	t|d�}t|j�d}i}t|jjdd||�}|D]F}|j}|j}d}|tj	kr1|t
O}|tjkr:|tO}|�
|�}	|	rd|	j|vrQ|	||	j@f||	j<q||	jd}
|	||
B|	j@f||	j<qt|���S)NrrTr)rZrrr[r�r��ident�filterrDr�rr�rrKr
r�listr3)rrCr��	ready_fds�kevent_listr�r
ryrr5�
old_eventsrrrrD]s.

�



�zKqueueSelector.selectcr�r)r�rFrQr�rrUrrrFzr�zKqueueSelector.closerr�rrrUrr�-s
r�c	CsPz|dkrt��}|�d�WdStt|����WdSttfy'YdSw)a
 Checks that select structs can be allocated by the underlying
    operating system, not just advertised by the select module. We don't
    check select() because we'll be hopeful that most platforms that
    don't have it available will not advertise it. (ie: GAE) rprTF)rDrprjrF�OSErrorr.)�struct�prrr�
_can_allocate�s
��r�)��cOs||i|��S)zy This is the short-circuit version of the below logic
        because in Python 3.5+ all selectors restart system calls. r)�funcrM�args�kwargsrrrr[�sr[c
Os:|�dd�}|durd}d}nt|�}|dkrd}nt�|}t|�}|r-d|vr-td��t}|tur�z	||i|��}WnZtttj	fy�}zJd}t
|d�rS|j}n
t
|d�r]|jd}|tj
kpkt
td	�ok|tjk}	|	r�|dur�t�}
|
|krttjd
��|r�d|vr�||
|d<WYd}~q/�d}~ww|tus3|S)z� Wrapper function for syscalls that could fail due to EINTR.
        All functions should be retried if there is time left in the timeout
        in accordance with PEP 475. rCNFrYz4Timeout must be in args or kwargs to be recalculatedr<r�r�WSAEINTRzConnection timed out)�getr��	monotonicr�r0�_SYSCALL_SENTINELr��IOErrorrDr;�hasattrr<r��EINTRr��	ETIMEDOUT)r��recalc_timeoutr�r�rC�expiresr��e�errcode�is_interrupt�current_timerrrr[�sP
�


����cCs�tdur>tjrtat�Std�rtat�Std�rtat�Std�r'tat�Std�r0tat�St	t
d�r:tat�Std��t�S)z� This function serves as a first call for DefaultSelector to
    detect if the select module is being monkey-patched incorrectly
    by eventlet, greenlet, and preserve proper behavior. Nr�r�r�rprDz"Platform does not have a selector.)
�_DEFAULT_SELECTORr�isjythonrfr�r�r�r�rqr�rDrPrHrrrrr	�s*
��	��
��r	)1r*�
__future__r�collectionsr<r�rDr:�sys�time�r�
namedtuple�Mappingr�r.�
__author__�	__email__�__version__�__license__�__url__�__all__rrr��objectr�r�r�r;r�rrr1r
r�rPr]r�rerfrqr�r�r�r��version_infor[r	rrrr�<module>st

�
	
0
8

3

A

;

Q

8