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
U
Z±dã@s¾ddlZddlZddlmZddlZddlmZddlZddlZddl    m
Z
ddl m Z ddl mZer€ejd    kr|ejd
ks€t‚ejd d d d Gdd„dƒƒZejd d dGdd„dƒƒZdS)éN)Ú TYPE_CHECKING)Úcontextmanageré)Ú_coreé)Ú_public)ÚWakeupSocketpairÚlinuxÚwin32TF)ÚslotsÚeqÚfrozenc@s(eZdZe ¡Ze ¡ZejddZdS)Ú_KqueueStatisticsÚkqueue©ÚdefaultN)Ú__name__Ú
__module__Ú __qualname__ÚattrÚibÚ tasks_waitingÚmonitorsÚbackend©rrúLd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\trio/_core/_io_kqueue.pyrsr)r r c@sÂeZdZejejdZejedZ    eje
dZ ejddZ dd„Z dd„Zdd    „Zd
d „Zd d „Zdd„Zedd„ƒZeedd„ƒƒZedd„ƒZdd„Zedd„ƒZedd„ƒZedd„ƒZdS)ÚKqueueIOManager)ÚfactoryNrcCs8t |jjtjtj¡}|j |gd¡|jj ¡|_    dS©Nr)
ÚselectÚkeventÚ _force_wakeupZ wakeup_sockÚKQ_FILTER_READÚ    KQ_EV_ADDÚ_kqueueÚcontrolÚfilenoÚ_force_wakeup_fd)ÚselfZforce_wakeup_eventrrrÚ__attrs_post_init__ sÿz#KqueueIOManager.__attrs_post_init__cCsDd}d}|j ¡D]$}t|ƒtjkr.|d7}q|d7}qt||dS)Nrr)rr)Ú _registeredÚvaluesÚtyperÚTaskr)r(rrÚreceiverrrrÚ
statistics's
 
zKqueueIOManager.statisticscCs|j ¡|j ¡dS©N)r$Úcloser!©r(rrrr11s
zKqueueIOManager.closecCs|j ¡dSr0)r!Zwakeup_thread_and_signal_safer2rrrÚ force_wakeup5szKqueueIOManager.force_wakeupcCsDt|jƒd}g}|j g||¡}||7}t|ƒ|kr:q@qd}q|S)Nrr)Úlenr*r$r%)r(ÚtimeoutZ
max_eventsÚeventsÚbatchrrrÚ
get_events8s zKqueueIOManager.get_eventscCs||D]r}|j|jf}|j|jkr,|j ¡q|j|}|jtj@rJ|j|=t    |ƒt
j krlt
  |t  |¡¡q| |¡qdSr0)ÚidentÚfilterr'r!Zdrainr*ÚflagsrÚ KQ_EV_ONESHOTr,rr-Ú
rescheduleÚoutcomeÚValueÚ
put_nowait)r(r6ÚeventÚkeyr.rrrÚprocess_eventsIs  
 
 zKqueueIOManager.process_eventscCs|jSr0)r$r2rrrÚcurrent_kqueuebszKqueueIOManager.current_kqueueccsH||f}||jkrt d¡‚t ¡}||j|<z
|VW5|j|=XdS)NúAattempt to register multiple listeners for same ident/filter pair)r*rÚBusyResourceErrorZUnboundedQueue)r(r9r:rBÚqrrrÚmonitor_keventfs
ÿ
 
zKqueueIOManager.monitor_keventcƒsJ||f‰ˆˆjkrt d¡‚t ¡ˆjˆ<‡‡‡fdd„}t |¡IdHS)NrEcs ˆ|ƒ}|tjjkrˆjˆ=|Sr0)rÚAbortÚ    SUCCEEDEDr*)Z raise_cancelÚr©Ú
abort_funcrBr(rrÚabort~s z*KqueueIOManager.wait_kevent.<locals>.abort)r*rrFZ current_taskZwait_task_rescheduled)r(r9r:rMrNrrLrÚ wait_keventus
ÿzKqueueIOManager.wait_keventcƒsdtˆtƒsˆ ¡‰tjtjB}t ˆˆ|¡}ˆj |gd¡‡‡‡fdd„}ˆ     ˆˆ|¡IdHdS)Nrc
sft ˆˆtj¡}zˆj |gd¡Wn8tk
r\}z|jtjtjfkrJn‚W5d}~XYnXt    j
j Sr) rr Ú KQ_EV_DELETEr$r%ÚOSErrorÚerrnoÚEBADFÚENOENTrrIrJ)Ú_rAÚexc©Úfdr:r(rrrNs z+KqueueIOManager._wait_common.<locals>.abort)
Ú
isinstanceÚintr&rr#r<r r$r%rO)r(rXr:r;rArNrrWrÚ _wait_common†s
 zKqueueIOManager._wait_commoncÃs| |tj¡IdHdSr0)r[rr"©r(rXrrrÚ wait_readable¥szKqueueIOManager.wait_readablecÃs| |tj¡IdHdSr0)r[rÚKQ_FILTER_WRITEr\rrrÚ wait_writable©szKqueueIOManager.wait_writablecCs¢t|tƒs| ¡}tjtjfD]~}||f}|j |¡}|dkr@qt|ƒt    j
kr”t  ||tj ¡}|j  |gd¡t     d¡}t     |t |¡¡|j|=qtdƒ‚qdS)Nrzanother task closed this fdz.can't close an fd that monitor_kevent is using)rYrZr&rr"r^r*Úgetr,rr-r rPr$r%ZClosedResourceErrorr=r>ÚErrorÚNotImplementedError)r(rXr:rBr.rArVrrrÚnotify_closing­s 
 
 
ÿzKqueueIOManager.notify_closing)rrrrrrrr$Údictr*rr!r'r)r/r1r3r8rCrrDrrHrOr[r]r_rcrrrrrs0   
 
 
 
 
r)rÚsysÚtypingrr>Ú
contextlibrrrRÚrZ_runrZ_wakeup_socketpairrÚplatformÚAssertionErrorÚsrrrrrrÚ<module>s