diff options
author | Thiago de Arruda <tpadilha84@gmail.com> | 2014-06-24 13:47:36 -0300 |
---|---|---|
committer | Thiago de Arruda <tpadilha84@gmail.com> | 2014-06-24 13:47:36 -0300 |
commit | 9f1b9726fb28f78fba7c50efa5316c4bf2413cf8 (patch) | |
tree | 4fb8f7d5e1d7f4153b508e987f268c0222431152 /src/nvim/os/event.c | |
parent | e1264412f80ac8bab15e8e960b93a30ca9254418 (diff) | |
parent | 296da85198a7d5da36dbb2e6f213edb5da511635 (diff) | |
download | rneovim-9f1b9726fb28f78fba7c50efa5316c4bf2413cf8.tar.gz rneovim-9f1b9726fb28f78fba7c50efa5316c4bf2413cf8.tar.bz2 rneovim-9f1b9726fb28f78fba7c50efa5316c4bf2413cf8.zip |
Merge pull request #872 'Add support for client-side RPC'
Diffstat (limited to 'src/nvim/os/event.c')
-rw-r--r-- | src/nvim/os/event.c | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/src/nvim/os/event.c b/src/nvim/os/event.c index 6723b97e0c..a8bd6ca886 100644 --- a/src/nvim/os/event.c +++ b/src/nvim/os/event.c @@ -63,11 +63,6 @@ bool event_poll(int32_t ms) { uv_run_mode run_mode = UV_RUN_ONCE; - if (input_ready()) { - // If there's a pending input event to be consumed, do it now - return true; - } - static int recursive = 0; if (!(recursive++)) { @@ -95,17 +90,16 @@ bool event_poll(int32_t ms) run_mode = UV_RUN_NOWAIT; } + bool events_processed; + do { // Run one event loop iteration, blocking for events if run_mode is // UV_RUN_ONCE uv_run(uv_default_loop(), run_mode); - // Process immediate events outside uv_run since libuv event loop not - // support recursion(processing events may cause a recursive event_poll - // call) - event_process(false); + events_processed = event_process(false); } while ( // Continue running if ... - !input_ready() && // we have no input + !events_processed && // we didn't process any immediate events !event_has_deferred() && // no events are waiting to be processed run_mode != UV_RUN_NOWAIT && // ms != 0 !timer_data.timed_out); // we didn't get a timeout @@ -124,7 +118,7 @@ bool event_poll(int32_t ms) event_process(false); } - return input_ready() || event_has_deferred(); + return !timer_data.timed_out && (events_processed || event_has_deferred()); } bool event_has_deferred() @@ -139,11 +133,13 @@ void event_push(Event event, bool deferred) } // Runs the appropriate action for each queued event -void event_process(bool deferred) +bool event_process(bool deferred) { + bool processed_events = false; Event event; while (kl_shift(Event, get_queue(deferred), &event) == 0) { + processed_events = true; switch (event.type) { case kEventSignal: signal_handle(event); @@ -158,6 +154,8 @@ void event_process(bool deferred) abort(); } } + + return processed_events; } // Set a flag in the `event_poll` loop for signaling of a timeout |