Skip to content

Commit eba819c

Browse files
committed
fix: cross-platform signal handling in watcher (Windows ctrl_c)
1 parent 97d0dec commit eba819c

2 files changed

Lines changed: 36 additions & 23 deletions

File tree

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ members = ["kqs", "kq-core", "kq-embeddings", "kq-llm", "kq-config"]
44

55
[workspace.package]
66
edition = "2024"
7-
version = "0.1.0"
7+
version = "0.1.1"
88
authors = ["kq team"]
99
license = "MIT OR Apache-2.0"
1010
repository = "https://github.com/bimawa/KnowledgeQuery"

kq-core/src/watcher.rs

Lines changed: 35 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -153,32 +153,45 @@ pub async fn start_watch(config: &KnowledgeConfig) -> Result<()> {
153153
// --- Signal handling (SIGINT + SIGTERM) ---
154154
let sig_sender = shutdown_tx;
155155
tokio::spawn(async move {
156-
use tokio::signal::unix::{SignalKind, signal};
156+
#[cfg(unix)]
157+
{
158+
use tokio::signal::unix::{SignalKind, signal};
157159

158-
let mut sigint = match signal(SignalKind::interrupt()) {
159-
Ok(s) => s,
160-
Err(e) => {
161-
eprintln!("[kqs] Failed to register SIGINT handler: {e}");
162-
return;
163-
}
164-
};
165-
let mut sigterm = match signal(SignalKind::terminate()) {
166-
Ok(s) => s,
167-
Err(e) => {
168-
eprintln!("[kqs] Failed to register SIGTERM handler: {e}");
169-
return;
170-
}
171-
};
160+
let mut sigint = match signal(SignalKind::interrupt()) {
161+
Ok(s) => s,
162+
Err(e) => {
163+
eprintln!("[kqs] Failed to register SIGINT handler: {e}");
164+
return;
165+
}
166+
};
167+
let mut sigterm = match signal(SignalKind::terminate()) {
168+
Ok(s) => s,
169+
Err(e) => {
170+
eprintln!("[kqs] Failed to register SIGTERM handler: {e}");
171+
return;
172+
}
173+
};
172174

173-
tokio::select! {
174-
_ = sigint.recv() => {
175-
eprintln!("[kqs] Received SIGINT — shutting down...");
176-
let _ = sig_sender.send(());
175+
tokio::select! {
176+
_ = sigint.recv() => {
177+
eprintln!("[kqs] Received SIGINT — shutting down...");
178+
let _ = sig_sender.send(());
179+
}
180+
_ = sigterm.recv() => {
181+
eprintln!("[kqs] Received SIGTERM — shutting down...");
182+
let _ = sig_sender.send(());
183+
}
177184
}
178-
_ = sigterm.recv() => {
179-
eprintln!("[kqs] Received SIGTERM — shutting down...");
180-
let _ = sig_sender.send(());
185+
}
186+
187+
#[cfg(windows)]
188+
{
189+
if let Err(e) = tokio::signal::ctrl_c().await {
190+
eprintln!("[kqs] Failed to register Ctrl+C handler: {e}");
191+
return;
181192
}
193+
eprintln!("[kqs] Received Ctrl+C — shutting down...");
194+
let _ = sig_sender.send(());
182195
}
183196
});
184197

0 commit comments

Comments
 (0)