a6d6caac68
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
50 lines
1.7 KiB
Diff
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);
|
|
}
|
|
}
|