1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
U
Z±d›8ã@sÒddlZddlZddlZddlmZddlmZmZddlm    Z    ddl
m Z ddl m Z dd    lmZervejd
ksvt‚ejd d d d Gdd„dƒƒZejd d dGdd„dƒƒZejd d d dGdd„dƒƒZdS)éN)Ú defaultdict)ÚDictÚ TYPE_CHECKINGé)Ú_coreé)Ú_public)Úwake_all)ÚWakeupSocketpairÚlinuxTF)ÚslotsÚeqÚfrozenc@s(eZdZe ¡Ze ¡ZejddZdS)Ú_EpollStatisticsÚepoll©ÚdefaultN)Ú__name__Ú
__module__Ú __qualname__ÚattrÚibÚtasks_waiting_readÚtasks_waiting_writeÚbackend©rrúKd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\trio/_core/_io_epoll.pyrsr)r r c@s0eZdZejddZejddZejddZdS)Ú EpollWaitersNrr)rrrrrÚ    read_taskÚ
write_taskÚ current_flagsrrrrr´s  r)r r Úhashc@s°eZdZejejdZejdd„ee    e
fdZ eje dZ ejddZdd„Zd    d
„Zd d „Zd d„Zdd„Zdd„Zdd„Zdd„Zedd„ƒZedd„ƒZedd„ƒZdS)ÚEpollIOManager)ÚfactorycCsttƒS©N)rrrrrrÚ<lambda>ÀózEpollIOManager.<lambda>)r#ÚtypeNrcCs&|j |jjtj¡|jj ¡|_dSr$)Ú_epollÚregisterÚ _force_wakeupZ wakeup_sockÚselectÚEPOLLINÚfilenoÚ_force_wakeup_fd©ÚselfrrrÚ__attrs_post_init__Åsz"EpollIOManager.__attrs_post_init__cCsHd}d}|j ¡D](}|jdk    r(|d7}|jdk    r|d7}qt||dS)Nrr)rr)Ú _registeredÚvaluesrrr)r0rrÚwaiterrrrÚ
statisticsÉs
 
 
þzEpollIOManager.statisticscCs|j ¡|j ¡dSr$)r(Úcloser*r/rrrr6Ös
zEpollIOManager.closecCs|j ¡dSr$)r*Zwakeup_thread_and_signal_safer/rrrÚ force_wakeupÚszEpollIOManager.force_wakeupcCstdt|jƒƒ}|j ||¡S)Nr)ÚmaxÚlenr2r(Úpoll)r0ÚtimeoutZ
max_eventsrrrÚ
get_eventsàszEpollIOManager.get_eventscCs’|D]ˆ\}}||jkr"|j ¡q|j|}d|_|tj@rZ|jdk    rZt     |j¡d|_|tj
@r‚|j dk    r‚t     |j ¡d|_ |  |¡qdS©Nr) r.r*Zdrainr2r r+r,rrZ
rescheduleÚEPOLLOUTrÚ_update_registrations)r0ÚeventsÚfdÚflagsÚwaitersrrrÚprocess_eventsçs 
 
 
  zEpollIOManager.process_eventsc
CsØ|j|}d}|jdk    r"|tjO}|jdk    r6|tjO}||jkrÈzLz|j ||tj    B¡Wn(t
k
r‚|j  ||tj    B¡YnX||_Wn:t
k
rÆ}z|j|=t ||ƒWY¢dSd}~XYnX|sÔ|j|=dSr=) r2rr+r,rr>r r(ÚmodifyZ EPOLLONESHOTÚOSErrorr)r    )r0rArCZ wanted_flagsÚexcrrrr?ús&
 
 
 
 
 
 
 
z$EpollIOManager._update_registrationscƒsttˆtƒsˆ ¡‰ˆjˆ‰tˆˆƒdk    r4t d¡‚tˆˆt ¡ƒˆ     ˆ¡‡‡‡‡fdd„}t 
|¡IdHdS)Nz1another task is already reading / writing this fdcstˆˆdƒˆ ˆ¡tjjSr$)Úsetattrr?rZAbortZ    SUCCEEDED)Ú_©Ú    attr_namerAr0rCrrÚabort"s 
z)EpollIOManager._epoll_wait.<locals>.abort) Ú
isinstanceÚintr-r2ÚgetattrrZBusyResourceErrorrHZ current_taskr?Zwait_task_rescheduled)r0rArKrLrrJrÚ _epoll_waits
 
ÿ
zEpollIOManager._epoll_waitcÃs| |d¡IdHdS)Nr©rP©r0rArrrÚ wait_readable)szEpollIOManager.wait_readablecÃs| |d¡IdHdS)NrrQrRrrrÚ wait_writable-szEpollIOManager.wait_writablec    Cs^t|tƒs| ¡}t|j|t d¡ƒ|j|=z|j |¡Wnt    t
fk
rXYnXdS)Nzanother task closed this fd) rMrNr-r    r2rZClosedResourceErrorr(Ú
unregisterrFÚ
ValueErrorrRrrrÚnotify_closing1s
þzEpollIOManager.notify_closing)rrrrrr+rr(rrNrr2r
r*r.r1r5r6r7r<rDr?rPrrSrTrWrrrrr"»s*
ÿ   
 
r")r+ÚsysrÚ collectionsrÚtypingrrÚrZ_runrZ
_io_commonr    Z_wakeup_socketpairr
ÚplatformÚAssertionErrorÚsrrr"rrrrÚ<module>s      %