From a567d878426de4b051f37dbf10e2791e150f2744 Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Sat, 12 Jul 2025 16:25:22 +0200 Subject: [PATCH] logd: Open kernel log inside LogScheme::new. This allows a future commit to skip writing to the kernel log when necessary. --- logd/src/main.rs | 13 +------------ logd/src/scheme.rs | 10 +++++++++- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/logd/src/main.rs b/logd/src/main.rs index 1798a43550..4368d2b99b 100644 --- a/logd/src/main.rs +++ b/logd/src/main.rs @@ -1,6 +1,4 @@ use redox_scheme::{RequestKind, SignalBehavior, Socket}; -use std::env; -use std::fs::OpenOptions; use std::io::{Read, Write}; use std::process; @@ -9,15 +7,6 @@ use crate::scheme::LogScheme; mod scheme; fn daemon(daemon: redox_daemon::Daemon) -> ! { - let mut files = Vec::new(); - for arg in env::args().skip(1) { - eprintln!("logd: opening {:?}", arg); - match OpenOptions::new().write(true).open(&arg) { - Ok(file) => files.push(file), - Err(err) => eprintln!("logd: failed to open {:?}: {:?}", arg, err), - } - } - let socket = Socket::create("log").expect("logd: failed to create log scheme"); std::process::Command::new(std::env::current_exe().unwrap()) @@ -29,7 +18,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! { daemon.ready().expect("logd: failed to notify parent"); - let mut scheme = LogScheme::new(files); + let mut scheme = LogScheme::new(); while let Some(request) = socket .next_request(SignalBehavior::Restart) diff --git a/logd/src/scheme.rs b/logd/src/scheme.rs index d0bd430b4c..ee9a19683d 100644 --- a/logd/src/scheme.rs +++ b/logd/src/scheme.rs @@ -30,13 +30,21 @@ enum OutputCmd { } impl LogScheme { - pub fn new(mut files: Vec) -> Self { + pub fn new() -> Self { + let mut kernel_debug = OpenOptions::new() + .write(true) + .open("/scheme/debug") + .unwrap(); + let (output_tx, output_rx) = mpsc::channel::(); std::thread::spawn(move || { + let mut files: Vec = vec![]; for cmd in output_rx { match cmd { OutputCmd::Log(line) => { + let _ = kernel_debug.write(&line); + let _ = kernel_debug.flush(); for file in &mut files { let _ = file.write(&line); let _ = file.flush();