loop.h (1226B)
1 #pragma once 2 3 #include <stdbool.h> 4 #include <uv.h> 5 6 #include "klib/kvec.h" 7 #include "nvim/event/defs.h" // IWYU pragma: keep 8 #include "nvim/types_defs.h" // IWYU pragma: keep 9 10 struct loop { 11 uv_loop_t uv; 12 MultiQueue *events; 13 MultiQueue *thread_events; 14 // Immediate events. 15 // - "Processed after exiting `uv_run()` (to avoid recursion), but before returning from 16 // `loop_poll_events()`." 502aee690c98 17 // - Practical consequence (for `main_loop`): 18 // - these are processed by `state_enter()..input_get()` whereas "regular" events 19 // (`main_loop.events`) are processed by `state_enter()..VimState.execute()` 20 // - `state_enter()..input_get()` can be "too early" if you want the event to trigger UI 21 // updates and other user-activity-related side-effects. 22 MultiQueue *fast_events; 23 24 // used by process/job-control subsystem 25 kvec_t(Proc *) children; 26 uv_signal_t children_watcher; 27 uv_timer_t children_kill_timer; 28 29 // generic timer, used by loop_poll_events() 30 uv_timer_t poll_timer; 31 32 uv_timer_t exit_delay_timer; 33 34 uv_async_t async; 35 uv_mutex_t mutex; 36 int recursive; 37 bool closing; ///< Set to true if loop_close() has been called 38 }; 39 40 #include "event/loop.h.generated.h"