fix Steam stop function, it can get into an infinite loop (#431)

* fix Steam stop function, it can get into an infinite loop

* add log

* skip process stop if not able to send the quit/kill signals
Ont the Steam Deck, it will try to kill the steamos-manager process, which is owned by root.
This commit is contained in:
David Martos
2025-01-12 21:58:15 +01:00
committed by GitHub
parent 85d5077688
commit 5a2fd23a72
+18 -4
View File
@@ -14,18 +14,32 @@ pub fn ensure_steam_stopped() {
let processes = s.processes_by_name(os_steam_name);
for process in processes {
let mut s = System::new();
process.kill_with(sysinfo::Signal::Quit);
process.kill_with(sysinfo::Signal::Kill);
let quit_res = process.kill_with(sysinfo::Signal::Quit);
let kill_res = process.kill_with(sysinfo::Signal::Kill);
if quit_res == Some(false) && kill_res == Some(false) {
// Couldn't kill the process, this could be because it was already killed or we don't have permissions
// For instance, the process "steamos-manager" in the Steam Deck is owned by root
continue;
}
let pid = process.pid();
let process_name = process.name();
let pid_arr = [pid];
let process_to_update = ProcessesToUpdate::Some(&pid_arr);
while s.refresh_processes_specifics(process_to_update, true,ProcessRefreshKind::everything()) == 0{
println!("Waiting for steam to stop");
while s.refresh_processes_specifics(process_to_update, true,ProcessRefreshKind::everything()) > 0
// The process is still alive
&& s.process(pid).is_some()
{
println!("Waiting for steam to stop. PID: {pid:?} Name: {process_name:?}");
sleep(Duration::from_millis(500));
process.kill_with(sysinfo::Signal::Quit);
process.kill_with(sysinfo::Signal::Kill);
}
}
println!("Steam is stopped");
}
#[cfg(target_os = "windows")]
pub fn ensure_steam_started(settings: &super::SteamSettings) {