use super::DapMessage;
use serde_json::Value;
use std::sync::mpsc::Sender;
use std::sync::{Mutex, MutexGuard};
pub(crate) fn lock_or_recover<'a, T>(mutex: &'a Mutex<T>, ctx: &'static str) -> MutexGuard<'a, T> {
match mutex.lock() {
Ok(guard) => guard,
Err(poisoned) => {
tracing::warn!(ctx, "Poisoned mutex recovered");
poisoned.into_inner()
}
}
}
pub(crate) fn emit_event_safe(
sender: &Sender<DapMessage>,
seq: &Mutex<i64>,
event: &str,
body: Option<Value>,
) -> bool {
let mut seq_lock = lock_or_recover(seq, "emit_event_safe.seq");
*seq_lock += 1;
sender.send(DapMessage::Event { seq: *seq_lock, event: event.to_string(), body }).is_ok()
}