diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-05-24 18:03:24 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-05-24 18:03:24 +0300 |
| commit | 5ce738cf5397d0d8a50ed1aa6335297073cc0f0f (patch) | |
| tree | bed3b4f720c58f76562709d22ce30aabf734eaf2 /src/app/runtime.rs | |
| parent | 26205a2ac5e21053bd94a0925efcfca44c6f549b (diff) | |
fix: avoid app event queue stalls
refs #265
Diffstat (limited to 'src/app/runtime.rs')
| -rw-r--r-- | src/app/runtime.rs | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/app/runtime.rs b/src/app/runtime.rs index 7f7306cc..284fb882 100644 --- a/src/app/runtime.rs +++ b/src/app/runtime.rs @@ -418,8 +418,23 @@ impl App { } pub(crate) fn drain_internal_events(&mut self) -> bool { + self.drain_internal_events_up_to(super::APP_EVENT_DRAIN_LIMIT) + } + + pub(crate) fn drain_all_internal_events(&mut self) -> bool { + let mut had_event = false; + while self.drain_internal_events_up_to(super::APP_EVENT_DRAIN_LIMIT) { + had_event = true; + } + had_event + } + + fn drain_internal_events_up_to(&mut self, limit: usize) -> bool { let mut had_event = false; - while let Ok(ev) = self.event_rx.try_recv() { + for _ in 0..limit { + let Ok(ev) = self.event_rx.try_recv() else { + break; + }; had_event = true; self.handle_internal_event(ev); } |
