From 50f9b84f6b2a6a3c9d9dc3d49a9e4bdaa585769c Mon Sep 17 00:00:00 2001 From: Anhad Singh <62820092+Andy-Python-Programmer@users.noreply.github.com> Date: Thu, 18 Dec 2025 20:42:54 +1100 Subject: [PATCH] fix(winit-orbital): handle `EINTR` when reading from `event_socket` Signed-off-by: Anhad Singh --- winit-orbital/src/event_loop.rs | 10 +++++++++- winit/src/changelog/unreleased.md | 1 + 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/winit-orbital/src/event_loop.rs b/winit-orbital/src/event_loop.rs index 8ef97156c..2247e5ec3 100644 --- a/winit-orbital/src/event_loop.rs +++ b/winit-orbital/src/event_loop.rs @@ -639,7 +639,15 @@ impl EventLoop { // Wait for event if needed. let mut event = syscall::Event::default(); - self.window_target.event_socket.read(&mut event).unwrap(); + loop { + match self.window_target.event_socket.read(&mut event) { + Ok(_) => break, + Err(syscall::Error { errno: syscall::EINTR }) => continue, + Err(err) => { + return Err(os_error!(format!("failed to read event: {err}")).into()); + }, + } + } // TODO: handle spurious wakeups (redraw caused wakeup but redraw already handled) match requested_resume { diff --git a/winit/src/changelog/unreleased.md b/winit/src/changelog/unreleased.md index b3a435f9d..62121352c 100644 --- a/winit/src/changelog/unreleased.md +++ b/winit/src/changelog/unreleased.md @@ -47,3 +47,4 @@ changelog entry. ### Fixed - On X11, fix `set_hittest` not working on some window managers. +- On Redox, handle `EINTR` when reading from `event_socket` instead of panicking.