diff --git a/src/MacVim/gui_macvim.m b/src/MacVim/gui_macvim.m index 85f2a13501..7ab8dc7d43 100644 --- a/src/MacVim/gui_macvim.m +++ b/src/MacVim/gui_macvim.m @@ -2260,13 +2260,19 @@ static int vimModMaskToEventModifierFlags(int mods) void * gui_macvim_add_channel(channel_T *channel, int part) { + dispatch_queue_t q = + dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0); dispatch_source_t s = dispatch_source_create(DISPATCH_SOURCE_TYPE_READ, channel->ch_part[part].ch_fd, 0, - dispatch_get_main_queue()); + q); dispatch_source_set_event_handler(s, ^{ - channel_read(channel, part, "gui_macvim_add_channel"); + dispatch_suspend(s); + dispatch_async(dispatch_get_main_queue(), ^{ + channel_read(channel, part, "gui_macvim_add_channel"); + dispatch_resume(s); + }); }); dispatch_resume(s); return s;