From 4a5f029e53779309ee81b0b11d186870975d79ca Mon Sep 17 00:00:00 2001 From: Luke D Jones Date: Thu, 13 Aug 2020 16:59:36 +1200 Subject: [PATCH] Fix deadlocks on some awaits --- asus-nb-ctrl/src/ctrl_fan_cpu.rs | 12 +++++------- asus-nb-ctrl/src/ctrl_leds.rs | 9 +++++---- asus-nb-ctrl/src/daemon.rs | 9 +++++++-- asus-nb/src/error.rs | 1 - 4 files changed, 17 insertions(+), 14 deletions(-) diff --git a/asus-nb-ctrl/src/ctrl_fan_cpu.rs b/asus-nb-ctrl/src/ctrl_fan_cpu.rs index e14bfd5d..7fd96069 100644 --- a/asus-nb-ctrl/src/ctrl_fan_cpu.rs +++ b/asus-nb-ctrl/src/ctrl_fan_cpu.rs @@ -41,21 +41,19 @@ impl crate::Controller for CtrlFanAndCPU { tokio::spawn(async move { while let Some(mode) = recv.recv().await { let mut config = config1.lock().await; - if let Ok(mut lock) = gate1.try_lock() { - lock.set_fan_mode(mode, &mut config) - .unwrap_or_else(|err| warn!("{:?}", err)); - } + let mut lock = gate1.lock().await; + lock.set_fan_mode(mode, &mut config) + .unwrap_or_else(|err| warn!("{:?}", err)); } }), // need to watch file path tokio::spawn(async move { loop { - if let Ok(mut lock) = gate2.try_lock() { - let mut config = config.lock().await; + let mut lock = gate2.lock().await; + if let Ok(mut config) = config.try_lock() { lock.fan_mode_check_change(&mut config) .unwrap_or_else(|err| warn!("{:?}", err)); } - tokio::time::delay_for(std::time::Duration::from_millis(500)).await; } }), diff --git a/asus-nb-ctrl/src/ctrl_leds.rs b/asus-nb-ctrl/src/ctrl_leds.rs index 32bc36f5..31245619 100644 --- a/asus-nb-ctrl/src/ctrl_leds.rs +++ b/asus-nb-ctrl/src/ctrl_leds.rs @@ -77,9 +77,10 @@ impl crate::Controller for CtrlKbdBacklight { tokio::spawn(async move { loop { let mut lock = gate2.lock().await; - let mut config = config.lock().await; - lock.let_bright_check_change(&mut config) - .unwrap_or_else(|err| warn!("{:?}", err)); + if let Ok(mut config) = config.try_lock() { + lock.let_bright_check_change(&mut config) + .unwrap_or_else(|err| warn!("{:?}", err)); + } tokio::time::delay_for(std::time::Duration::from_millis(500)).await; } }), @@ -148,7 +149,7 @@ impl CtrlKbdBacklight { for device in enumerator.scan_devices()? { if let Some(parent) = device.parent_with_subsystem_devtype("usb", "usb_device")? { if parent.attribute_value("idProduct").unwrap() == id_product { - // && device.parent().unwrap().sysnum().unwrap() == 3 + // && device.parent().unwrap().sysnum().unwrap() == 3 if let Some(dev_node) = device.devnode() { info!("Using device at: {:?} for LED control", dev_node); return Ok(dev_node.to_string_lossy().to_string()); diff --git a/asus-nb-ctrl/src/daemon.rs b/asus-nb-ctrl/src/daemon.rs index 88f91a33..ce636c06 100644 --- a/asus-nb-ctrl/src/daemon.rs +++ b/asus-nb-ctrl/src/daemon.rs @@ -4,11 +4,15 @@ use daemon::{ laptops::match_laptop, }; -use dbus::{channel::Sender, nonblock::SyncConnection, tree::Signal}; +use dbus::{ + channel::Sender, + nonblock::{Process, SyncConnection}, + tree::Signal, +}; +use dbus_tokio::connection; use asus_nb::{DBUS_IFACE, DBUS_NAME, DBUS_PATH}; use daemon::Controller; -use dbus_tokio::connection; use log::LevelFilter; use log::{error, info, warn}; use std::error::Error; @@ -161,6 +165,7 @@ pub async fn start_daemon() -> Result<(), Box> { )); } + connection.process_all(); for handle in handles { handle.await?; } diff --git a/asus-nb/src/error.rs b/asus-nb/src/error.rs index 2d0fd1a9..d1e312ee 100644 --- a/asus-nb/src/error.rs +++ b/asus-nb/src/error.rs @@ -18,4 +18,3 @@ impl fmt::Display for AuraError { } } } -