diff --git a/src/platform/linux/wayland/event_loop.rs b/src/platform/linux/wayland/event_loop.rs index 48b81bd4..d21597b7 100644 --- a/src/platform/linux/wayland/event_loop.rs +++ b/src/platform/linux/wayland/event_loop.rs @@ -193,7 +193,13 @@ impl EventsLoop { let static_cb = unsafe { ::std::mem::transmute(Box::new(callback) as Box) }; let old_cb = unsafe { self.sink.lock().unwrap().set_callback(static_cb) }; - while !self.interrupted.load(::std::sync::atomic::Ordering::Relaxed) { + loop { + // If `interrupt` was called, break from the loop after resetting the flag. + if self.interrupted.load(::std::sync::atomic::Ordering::Relaxed) { + self.interrupted.store(false, ::std::sync::atomic::Ordering::Relaxed); + break; + } + self.ctxt.dispatch(); evq_guard.dispatch_pending().expect("Wayland connection unexpectedly lost"); let ids_guard = self.decorated_ids.lock().unwrap();