mirror of
https://github.com/djibux/BoilR.git
synced 2026-09-01 05:53:41 +02:00
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:
+18
-4
@@ -14,18 +14,32 @@ pub fn ensure_steam_stopped() {
|
|||||||
let processes = s.processes_by_name(os_steam_name);
|
let processes = s.processes_by_name(os_steam_name);
|
||||||
for process in processes {
|
for process in processes {
|
||||||
let mut s = System::new();
|
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 pid = process.pid();
|
||||||
|
let process_name = process.name();
|
||||||
let pid_arr = [pid];
|
let pid_arr = [pid];
|
||||||
let process_to_update = ProcessesToUpdate::Some(&pid_arr);
|
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));
|
sleep(Duration::from_millis(500));
|
||||||
process.kill_with(sysinfo::Signal::Quit);
|
process.kill_with(sysinfo::Signal::Quit);
|
||||||
process.kill_with(sysinfo::Signal::Kill);
|
process.kill_with(sysinfo::Signal::Kill);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
println!("Steam is stopped");
|
||||||
}
|
}
|
||||||
#[cfg(target_os = "windows")]
|
#[cfg(target_os = "windows")]
|
||||||
pub fn ensure_steam_started(settings: &super::SteamSettings) {
|
pub fn ensure_steam_started(settings: &super::SteamSettings) {
|
||||||
|
|||||||
Reference in New Issue
Block a user