From 50ff5b162e4d931dba5af7b3aa2c30fc7739ce53 Mon Sep 17 00:00:00 2001 From: Dreaded_X Date: Fri, 6 Jan 2023 23:16:36 +0100 Subject: [PATCH] Switched from std::RwLock to parking_lot --- Cargo.lock | 1 + Cargo.toml | 1 + src/light_sensor.rs | 5 +++-- src/main.rs | 7 ++++--- src/mqtt.rs | 5 +++-- src/presence.rs | 5 +++-- 6 files changed, 15 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5b8296c..f151680 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -44,6 +44,7 @@ dependencies = [ "dotenv", "google-home", "impl_cast", + "parking_lot", "paste", "pollster", "regex", diff --git a/Cargo.toml b/Cargo.toml index 21ac022..31ad619 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -28,6 +28,7 @@ tracing-subscriber = { version = "0.3.16", features = ["env-filter"] } bytes = "1.3.0" pollster = "0.2.5" regex = "1.7.0" +parking_lot = "0.12.1" [profile.release] lto=true diff --git a/src/light_sensor.rs b/src/light_sensor.rs index 8d330ae..fd676aa 100644 --- a/src/light_sensor.rs +++ b/src/light_sensor.rs @@ -1,5 +1,6 @@ -use std::sync::{Weak, RwLock}; +use std::sync::Weak; +use parking_lot::RwLock; use pollster::FutureExt as _; use rumqttc::{AsyncClient, matches}; use tracing::{span, Level, log::{error, trace}, debug}; @@ -34,7 +35,7 @@ impl LightSensor { let _span = span!(Level::TRACE, "darkness_update").entered(); listeners.into_iter().for_each(|listener| { if let Some(listener) = listener.upgrade() { - listener.write().unwrap().on_darkness(dark); + listener.write().on_darkness(dark); } }) } diff --git a/src/main.rs b/src/main.rs index a687910..e87e1bf 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,6 @@ #![feature(async_closure)] -use std::{time::Duration, sync::{Arc, RwLock}, process}; +use std::{time::Duration, sync::Arc, process}; +use parking_lot::RwLock; use axum::{Router, Json, routing::post, http::StatusCode, extract::FromRef}; @@ -67,7 +68,7 @@ async fn main() { device_config.into(identifier, &config, client.clone()) }) .for_each(|device| { - devices.write().unwrap().add_device(device); + devices.write().add_device(device); }); // Setup presence system @@ -101,7 +102,7 @@ async fn main() { // Handle request might block, so we need to spawn a blocking task tokio::task::spawn_blocking(move || { let gc = GoogleHome::new(&user.preferred_username); - let result = gc.handle_request(payload, &mut devices.write().unwrap().as_google_home_devices()).unwrap(); + let result = gc.handle_request(payload, &mut devices.write().as_google_home_devices()).unwrap(); return (StatusCode::OK, Json(result)); }).await.unwrap() diff --git a/src/mqtt.rs b/src/mqtt.rs index caf10aa..1e99468 100644 --- a/src/mqtt.rs +++ b/src/mqtt.rs @@ -1,4 +1,5 @@ -use std::sync::{Weak, RwLock}; +use std::sync::Weak; +use parking_lot::RwLock; use serde::{Serialize, Deserialize}; use tracing::{error, debug, span, Level}; @@ -24,7 +25,7 @@ impl Mqtt { let _span = span!(Level::TRACE, "mqtt_message").entered(); listeners.into_iter().for_each(|listener| { if let Some(listener) = listener.upgrade() { - listener.write().unwrap().on_mqtt(&message); + listener.write().on_mqtt(&message); } }) } diff --git a/src/presence.rs b/src/presence.rs index fb3fbba..d6c570a 100644 --- a/src/presence.rs +++ b/src/presence.rs @@ -1,5 +1,6 @@ -use std::{sync::{Weak, RwLock}, collections::HashMap}; +use std::{sync::Weak, collections::HashMap}; +use parking_lot::RwLock; use tracing::{debug, span, Level, error}; use rumqttc::{AsyncClient, matches}; use pollster::FutureExt as _; @@ -32,7 +33,7 @@ impl Presence { let _span = span!(Level::TRACE, "presence_update").entered(); listeners.into_iter().for_each(|listener| { if let Some(listener) = listener.upgrade() { - listener.write().unwrap().on_presence(presence); + listener.write().on_presence(presence); } }) }