From c617acfc4659f7d4868a00385d4ea709c15e628c Mon Sep 17 00:00:00 2001 From: Kazuki Sakamoto Date: Wed, 17 Aug 2016 22:49:57 -0700 Subject: [PATCH] Use global queue in order to catch read event from channel --- src/MacVim/gui_macvim.m | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) 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;