@@ -104,7 +104,9 @@ _evfiltstr(short filt)
104
104
#ifdef EVFILT_FS
105
105
_evfilt2 (EVFILT_FS );
106
106
#endif
107
+ #ifdef EVFILT_USER
107
108
_evfilt2 (EVFILT_USER );
109
+ #endif
108
110
#ifdef EVFILT_SOCK
109
111
_evfilt2 (EVFILT_SOCK );
110
112
#endif
@@ -532,11 +534,17 @@ _dispatch_kevent_merge_muxed(dispatch_kevent_t ke)
532
534
}
533
535
}
534
536
537
+ #define DISPATCH_KEVENT_ERSATZ_EVFILT_USER_IDENT 0xfffffe00
538
+
535
539
DISPATCH_NOINLINE
536
540
static void
537
541
_dispatch_kevent_drain (dispatch_kevent_t ke )
538
542
{
543
+ #ifdef EVFILT_USER
539
544
if (ke -> filter == EVFILT_USER ) {
545
+ #else
546
+ if (ke -> filter == EVFILT_TIMER && ke -> ident == DISPATCH_KEVENT_ERSATZ_EVFILT_USER_IDENT ) {
547
+ #endif
540
548
_dispatch_kevent_mgr_debug ("received" , ke );
541
549
return ;
542
550
}
@@ -583,10 +591,17 @@ static void
583
591
_dispatch_kq_create (intptr_t * fd_ptr )
584
592
{
585
593
static const dispatch_kevent_s kev = {
594
+ #ifdef EVFILT_USER
586
595
.ident = 1 ,
587
596
.filter = EVFILT_USER ,
588
597
.flags = EV_ADD |EV_CLEAR ,
589
598
.udata = (dispatch_kevent_udata_t )DISPATCH_WLH_MANAGER ,
599
+ #else
600
+ .ident = DISPATCH_KEVENT_ERSATZ_EVFILT_USER_IDENT ,
601
+ .filter = EVFILT_TIMER ,
602
+ .flags = EV_ADD |EV_DISABLE |EV_ONESHOT ,
603
+ .data = 1 ,
604
+ #endif
590
605
};
591
606
int kqfd ;
592
607
@@ -789,9 +804,15 @@ _dispatch_kq_drain(dispatch_wlh_t wlh, dispatch_kevent_t ke, int n,
789
804
790
805
#if DISPATCH_DEBUG
791
806
for (r = 0 ; r < n ; r ++ ) {
807
+ #ifdef EVFILT_USER
792
808
if (ke [r ].filter != EVFILT_USER || DISPATCH_MGR_QUEUE_DEBUG ) {
793
809
_dispatch_kevent_debug_n (NULL , ke + r , r , n );
794
810
}
811
+ #else
812
+ if (DISPATCH_MGR_QUEUE_DEBUG ) {
813
+ _dispatch_kevent_debug_n (NULL , ke + r , r , n );
814
+ }
815
+ #endif
795
816
}
796
817
#endif
797
818
@@ -923,9 +944,13 @@ _dispatch_kq_deferred_update(dispatch_wlh_t wlh, dispatch_kevent_t ke)
923
944
ke -> udata );
924
945
dispatch_kevent_t dk = _dispatch_kq_deferred_reuse_slot (wlh , ddi , slot );
925
946
* dk = * ke ;
947
+ #ifdef EVFILT_USER
926
948
if (ke -> filter != EVFILT_USER ) {
927
949
_dispatch_kevent_mgr_debug ("deferred" , ke );
928
950
}
951
+ #else
952
+ _dispatch_kevent_mgr_debug ("deferred" , ke );
953
+ #endif
929
954
} else {
930
955
_dispatch_kq_update_one (wlh , ke );
931
956
}
@@ -1887,10 +1912,17 @@ _dispatch_event_loop_poke(dispatch_wlh_t wlh, uint64_t dq_state, uint32_t flags)
1887
1912
{
1888
1913
if (wlh == DISPATCH_WLH_MANAGER ) {
1889
1914
dispatch_kevent_s ke = (dispatch_kevent_s ){
1915
+ #ifdef EVFILT_USER
1890
1916
.ident = 1 ,
1891
1917
.filter = EVFILT_USER ,
1892
1918
.fflags = NOTE_TRIGGER ,
1893
1919
.udata = (dispatch_kevent_udata_t )DISPATCH_WLH_MANAGER ,
1920
+ #else
1921
+ .ident = DISPATCH_KEVENT_ERSATZ_EVFILT_USER_IDENT ,
1922
+ .filter = EVFILT_TIMER ,
1923
+ .flags = EV_ADD |EV_ENABLE |EV_ONESHOT ,
1924
+ .data = 1
1925
+ #endif
1894
1926
};
1895
1927
return _dispatch_kq_deferred_update (DISPATCH_WLH_ANON , & ke );
1896
1928
} else if (wlh && wlh != DISPATCH_WLH_ANON ) {
0 commit comments