Files
RedBear-OS/local/patches/redox-drm/P8-terminal-scheme-ebadf.patch
T
2026-05-07 20:53:27 +01:00

50 lines
1.7 KiB
Diff

--- a/src/main.rs
+++ b/src/main.rs
@@ -24,6 +24,7 @@ use redox_driver_sys::pcid_client::PcidClient;
use redox_driver_sys::quirks::PciQuirkFlags;
use redox_scheme::{SignalBehavior, Socket};
+use syscall04::error::EBADF;
use crate::driver::{DriverError, DriverEvent, GpuDriver, Result};
use crate::drivers::DriverRegistry;
@@ -102,10 +103,13 @@ fn run() -> Result<()> {
let event_scheme = drm_scheme.clone();
std::thread::spawn(move || loop {
- if let Ok(event) = event_rx.recv() {
- if let Ok(mut scheme) = event_scheme.lock() {
- scheme.handle_driver_event(event);
- }
+ let Ok(event) = event_rx.recv() else {
+ info!("redox-drm: event producer dropped, stopping driver event thread");
+ break;
+ };
+
+ if let Ok(mut scheme) = event_scheme.lock() {
+ scheme.handle_driver_event(event);
}
});
@@ -118,6 +122,10 @@ fn run() -> Result<()> {
break;
}
Err(e) => {
+ if e.errno == EBADF {
+ info!("redox-drm: scheme fd closed, exiting");
+ break;
+ }
error!("redox-drm: failed to receive scheme request: {}", e);
continue;
}
@@ -145,6 +153,10 @@ fn run() -> Result<()> {
};
if let Err(e) = socket.write_response(response, SignalBehavior::Restart) {
+ if e.errno == EBADF {
+ info!("redox-drm: scheme fd closed while writing response, exiting");
+ break;
+ }
error!("redox-drm: failed to write scheme response: {}", e);
}
}