@@ -2257,16 +2257,28 @@ static int vimModMaskToEventModifierFlags(int mods)
22572257
22582258// -- Channel Support ------------------------------------------------------
22592259
2260+ static NSMutableSet *MMChannels;
2261+
22602262 void *
22612263gui_macvim_add_channel (channel_T *channel, int part)
22622264{
2265+ if (!MMChannels)
2266+ MMChannels = [NSMutableSet new ];
2267+
2268+ int fd = channel->ch_part [part].ch_fd ;
2269+ dispatch_queue_t q =
2270+ dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_HIGH, 0 );
22632271 dispatch_source_t s =
2264- dispatch_source_create (DISPATCH_SOURCE_TYPE_READ,
2265- channel->ch_part [part].ch_fd ,
2266- 0 ,
2267- dispatch_get_main_queue ());
2272+ dispatch_source_create (DISPATCH_SOURCE_TYPE_READ, fd, 0 , q);
2273+ [MMChannels addObject: s];
22682274 dispatch_source_set_event_handler (s, ^{
2269- channel_read (channel, part, " gui_macvim_add_channel" );
2275+ dispatch_suspend (s);
2276+ dispatch_async (dispatch_get_main_queue (), ^{
2277+ if ([MMChannels containsObject: s]) {
2278+ channel_read (channel, part, " gui_macvim_add_channel" );
2279+ dispatch_resume (s);
2280+ }
2281+ });
22702282 });
22712283 dispatch_resume (s);
22722284 return s;
@@ -2276,6 +2288,7 @@ static int vimModMaskToEventModifierFlags(int mods)
22762288gui_macvim_remove_channel (void *cookie)
22772289{
22782290 dispatch_source_t s = (dispatch_source_t )cookie;
2291+ [MMChannels removeObject: s];
22792292 dispatch_source_cancel (s);
22802293 dispatch_release (s);
22812294}
0 commit comments