@@ -1192,9 +1192,17 @@ _dispatch_kevent_merge(_dispatch_kevent_qos_s *ke)
1192
1192
dk = (void * )ke -> udata ;
1193
1193
dispatch_assert (dk );
1194
1194
1195
+ #ifdef __LINUX_PORT_HDD__
1196
+ LINUX_PORT_ERROR ();
1197
+ // NOT CORRECT (doesn't support removal during iteration)
1198
+ TAILQ_FOREACH (dri , & dk -> dk_sources , dr_list ) {
1199
+ _dispatch_source_merge_kevent (_dispatch_source_from_refs (dri ), ke );
1200
+ }
1201
+ #else
1195
1202
TAILQ_FOREACH_SAFE (dri , & dk -> dk_sources , dr_list , dr_next ) {
1196
1203
_dispatch_source_merge_kevent (_dispatch_source_from_refs (dri ), ke );
1197
1204
}
1205
+ #endif
1198
1206
}
1199
1207
1200
1208
#if DISPATCH_USE_GUARDED_FD_CHANGE_FDGUARD
@@ -3094,6 +3102,30 @@ _dispatch_mach_notify_merge(mach_port_t name, uint32_t flag, bool final)
3094
3102
unreg = _dispatch_kevent_resume (dk , flag , 0 );
3095
3103
}
3096
3104
DISPATCH_MACH_KEVENT_ARMED (dk ) = 0 ;
3105
+ #ifdef __LINUX_PORT_HDD__
3106
+ LINUX_PORT_ERROR ();
3107
+ // NOT CORRECT (doesn't support removal during iteration)
3108
+ TAILQ_FOREACH (dri , & dk -> dk_sources , dr_list ) {
3109
+ dispatch_source_t dsi = _dispatch_source_from_refs (dri );
3110
+ if (dx_type (dsi ) == DISPATCH_MACH_CHANNEL_TYPE ) {
3111
+ dispatch_mach_t dm = (dispatch_mach_t )dsi ;
3112
+ _dispatch_mach_merge_kevent (dm , & kev );
3113
+ if (unreg && dm -> dm_dkev ) {
3114
+ _dispatch_mach_kevent_unregister (dm );
3115
+ }
3116
+ } else {
3117
+ _dispatch_source_merge_kevent (dsi , & kev );
3118
+ if (unreg ) {
3119
+ _dispatch_source_kevent_unregister (dsi );
3120
+ }
3121
+ }
3122
+ if (!dr_next || DISPATCH_MACH_KEVENT_ARMED (dk )) {
3123
+ // current merge is last in list (dk might have been freed)
3124
+ // or it re-armed the notification
3125
+ return ;
3126
+ }
3127
+ }
3128
+ #else
3097
3129
TAILQ_FOREACH_SAFE (dri , & dk -> dk_sources , dr_list , dr_next ) {
3098
3130
dispatch_source_t dsi = _dispatch_source_from_refs (dri );
3099
3131
if (dx_type (dsi ) == DISPATCH_MACH_CHANNEL_TYPE ) {
@@ -3114,6 +3146,7 @@ _dispatch_mach_notify_merge(mach_port_t name, uint32_t flag, bool final)
3114
3146
return ;
3115
3147
}
3116
3148
}
3149
+ #endif
3117
3150
}
3118
3151
3119
3152
static kern_return_t
@@ -3966,9 +3999,17 @@ _dispatch_mach_disconnect(dispatch_mach_t dm)
3966
3999
}
3967
4000
if (!TAILQ_EMPTY (& dm -> dm_refs -> dm_replies )) {
3968
4001
dispatch_mach_reply_refs_t dmr , tmp ;
4002
+ #ifdef __LINUX_PORT_HDD__
4003
+ LINUX_PORT_ERROR ();
4004
+ // NOT CORRECT (doesn't support removal during iteration)
4005
+ TAILQ_FOREACH (dmr , & dm -> dm_refs -> dm_replies , dmr_list ){
4006
+ _dispatch_mach_reply_kevent_unregister (dm , dmr , true);
4007
+ }
4008
+ #else
3969
4009
TAILQ_FOREACH_SAFE (dmr , & dm -> dm_refs -> dm_replies , dmr_list , tmp ){
3970
4010
_dispatch_mach_reply_kevent_unregister (dm , dmr , true);
3971
4011
}
4012
+ #endif
3972
4013
}
3973
4014
}
3974
4015
@@ -4735,6 +4776,10 @@ _dispatch_source_debug(dispatch_source_t ds, char* buf, size_t bufsiz)
4735
4776
static size_t
4736
4777
_dispatch_mach_debug_attr (dispatch_mach_t dm , char * buf , size_t bufsiz )
4737
4778
{
4779
+ #ifdef __LINUX_PORT_HDD__
4780
+ LINUX_PORT_ERROR ();
4781
+ return (size_t )0 ;
4782
+ #else
4738
4783
dispatch_queue_t target = dm -> do_targetq ;
4739
4784
return dsnprintf (buf , bufsiz , "target = %s[%p], receive = 0x%x, "
4740
4785
"send = 0x%x, send-possible = 0x%x%s, checkin = 0x%x%s, "
@@ -4748,10 +4793,15 @@ _dispatch_mach_debug_attr(dispatch_mach_t dm, char* buf, size_t bufsiz)
4748
4793
dm -> dm_refs -> dm_checkin ? " (pending)" : "" ,
4749
4794
dm -> dm_refs -> dm_sending , dm -> dm_refs -> dm_disconnect_cnt ,
4750
4795
(bool )(dm -> ds_atomic_flags & DSF_CANCELED ));
4796
+ #endif
4751
4797
}
4752
4798
size_t
4753
4799
_dispatch_mach_debug (dispatch_mach_t dm , char * buf , size_t bufsiz )
4754
4800
{
4801
+ #ifdef __LINUX_PORT_HDD__
4802
+ LINUX_PORT_ERROR ();
4803
+ return (size_t )0 ;
4804
+ #else
4755
4805
size_t offset = 0 ;
4756
4806
offset += dsnprintf (& buf [offset ], bufsiz - offset , "%s[%p] = { " ,
4757
4807
dm -> dq_label && !dm -> dm_cancel_handler_called ? dm -> dq_label :
@@ -4760,6 +4810,7 @@ _dispatch_mach_debug(dispatch_mach_t dm, char* buf, size_t bufsiz)
4760
4810
offset += _dispatch_mach_debug_attr (dm , & buf [offset ], bufsiz - offset );
4761
4811
offset += dsnprintf (& buf [offset ], bufsiz - offset , "}" );
4762
4812
return offset ;
4813
+ #endif
4763
4814
}
4764
4815
4765
4816
#if DISPATCH_DEBUG
0 commit comments