mirror of
https://forgejo.ellis.link/continuwuation/continuwuity.git
synced 2025-09-11 00:52:49 +02:00
refactor: Replace std Mutex with parking_lot
This commit is contained in:
parent
0631094350
commit
30a8c06fd9
12 changed files with 44 additions and 59 deletions
|
@ -55,7 +55,7 @@ where
|
|||
let mut visitor = Visitor { values: Values::new() };
|
||||
event.record(&mut visitor);
|
||||
|
||||
let mut closure = capture.closure.lock().expect("exclusive lock");
|
||||
let mut closure = capture.closure.lock();
|
||||
closure(Data {
|
||||
layer,
|
||||
event,
|
||||
|
|
|
@ -4,7 +4,7 @@ pub mod layer;
|
|||
pub mod state;
|
||||
pub mod util;
|
||||
|
||||
use std::sync::{Arc, Mutex};
|
||||
use std::sync::Arc;
|
||||
|
||||
pub use data::Data;
|
||||
use guard::Guard;
|
||||
|
@ -12,6 +12,8 @@ pub use layer::{Layer, Value};
|
|||
pub use state::State;
|
||||
pub use util::*;
|
||||
|
||||
use crate::SyncMutex;
|
||||
|
||||
pub type Filter = dyn Fn(Data<'_>) -> bool + Send + Sync + 'static;
|
||||
pub type Closure = dyn FnMut(Data<'_>) + Send + Sync + 'static;
|
||||
|
||||
|
@ -19,7 +21,7 @@ pub type Closure = dyn FnMut(Data<'_>) + Send + Sync + 'static;
|
|||
pub struct Capture {
|
||||
state: Arc<State>,
|
||||
filter: Option<Box<Filter>>,
|
||||
closure: Mutex<Box<Closure>>,
|
||||
closure: SyncMutex<Box<Closure>>,
|
||||
}
|
||||
|
||||
impl Capture {
|
||||
|
@ -34,7 +36,7 @@ impl Capture {
|
|||
Arc::new(Self {
|
||||
state: state.clone(),
|
||||
filter: filter.map(|p| -> Box<Filter> { Box::new(p) }),
|
||||
closure: Mutex::new(Box::new(closure)),
|
||||
closure: SyncMutex::new(Box::new(closure)),
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -1,31 +1,31 @@
|
|||
use std::sync::{Arc, Mutex};
|
||||
use std::sync::Arc;
|
||||
|
||||
use super::{
|
||||
super::{Level, fmt},
|
||||
Closure, Data,
|
||||
};
|
||||
use crate::Result;
|
||||
use crate::{Result, SyncMutex};
|
||||
|
||||
pub fn fmt_html<S>(out: Arc<Mutex<S>>) -> Box<Closure>
|
||||
pub fn fmt_html<S>(out: Arc<SyncMutex<S>>) -> Box<Closure>
|
||||
where
|
||||
S: std::fmt::Write + Send + 'static,
|
||||
{
|
||||
fmt(fmt::html, out)
|
||||
}
|
||||
|
||||
pub fn fmt_markdown<S>(out: Arc<Mutex<S>>) -> Box<Closure>
|
||||
pub fn fmt_markdown<S>(out: Arc<SyncMutex<S>>) -> Box<Closure>
|
||||
where
|
||||
S: std::fmt::Write + Send + 'static,
|
||||
{
|
||||
fmt(fmt::markdown, out)
|
||||
}
|
||||
|
||||
pub fn fmt<F, S>(fun: F, out: Arc<Mutex<S>>) -> Box<Closure>
|
||||
pub fn fmt<F, S>(fun: F, out: Arc<SyncMutex<S>>) -> Box<Closure>
|
||||
where
|
||||
F: Fn(&mut S, &Level, &str, &str) -> Result<()> + Send + Sync + Copy + 'static,
|
||||
S: std::fmt::Write + Send + 'static,
|
||||
{
|
||||
Box::new(move |data| call(fun, &mut *out.lock().expect("locked"), &data))
|
||||
Box::new(move |data| call(fun, &mut *out.lock(), &data))
|
||||
}
|
||||
|
||||
fn call<F, S>(fun: F, out: &mut S, data: &Data<'_>)
|
||||
|
|
|
@ -1,11 +1,8 @@
|
|||
use std::{
|
||||
collections::HashMap,
|
||||
sync::{Arc, Mutex},
|
||||
};
|
||||
use std::{collections::HashMap, sync::Arc};
|
||||
|
||||
use tracing_subscriber::{EnvFilter, reload};
|
||||
|
||||
use crate::{Result, error};
|
||||
use crate::{Result, SyncMutex, error};
|
||||
|
||||
/// We need to store a reload::Handle value, but can't name it's type explicitly
|
||||
/// because the S type parameter depends on the subscriber's previous layers. In
|
||||
|
@ -35,7 +32,7 @@ impl<L: Clone, S> ReloadHandle<L> for reload::Handle<L, S> {
|
|||
|
||||
#[derive(Clone)]
|
||||
pub struct LogLevelReloadHandles {
|
||||
handles: Arc<Mutex<HandleMap>>,
|
||||
handles: Arc<SyncMutex<HandleMap>>,
|
||||
}
|
||||
|
||||
type HandleMap = HashMap<String, Handle>;
|
||||
|
@ -43,16 +40,12 @@ type Handle = Box<dyn ReloadHandle<EnvFilter> + Send + Sync>;
|
|||
|
||||
impl LogLevelReloadHandles {
|
||||
pub fn add(&self, name: &str, handle: Handle) {
|
||||
self.handles
|
||||
.lock()
|
||||
.expect("locked")
|
||||
.insert(name.into(), handle);
|
||||
self.handles.lock().insert(name.into(), handle);
|
||||
}
|
||||
|
||||
pub fn reload(&self, new_value: &EnvFilter, names: Option<&[&str]>) -> Result<()> {
|
||||
self.handles
|
||||
.lock()
|
||||
.expect("locked")
|
||||
.iter()
|
||||
.filter(|(name, _)| names.is_some_and(|names| names.contains(&name.as_str())))
|
||||
.for_each(|(_, handle)| {
|
||||
|
@ -66,7 +59,6 @@ impl LogLevelReloadHandles {
|
|||
pub fn current(&self, name: &str) -> Option<EnvFilter> {
|
||||
self.handles
|
||||
.lock()
|
||||
.expect("locked")
|
||||
.get(name)
|
||||
.map(|handle| handle.current())?
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue