Skip to content

Commit 550497e

Browse files
authored
Use parking_lot in faulthandler (#6438)
1 parent 8e21db1 commit 550497e

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

crates/stdlib/src/faulthandler.rs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,11 @@ mod decl {
77
PyObjectRef, PyResult, VirtualMachine, builtins::PyFloat, frame::Frame,
88
function::OptionalArg, py_io::Write,
99
};
10+
use parking_lot::{Condvar, Mutex};
1011
#[cfg(any(unix, windows))]
1112
use rustpython_common::os::{get_errno, set_errno};
13+
use std::sync::Arc;
1214
use std::sync::atomic::{AtomicBool, AtomicI32, Ordering};
13-
use std::sync::{Arc, Condvar, Mutex};
1415
use std::thread;
1516
use std::time::Duration;
1617

@@ -692,13 +693,12 @@ mod decl {
692693

693694
loop {
694695
// Hold lock across wait_timeout to avoid race condition
695-
let mut guard = lock.lock().unwrap();
696+
let mut guard = lock.lock();
696697
if guard.cancel {
697698
return;
698699
}
699700
let timeout = Duration::from_micros(guard.timeout_us);
700-
let result = cvar.wait_timeout(guard, timeout).unwrap();
701-
guard = result.0;
701+
cvar.wait_for(&mut guard, timeout);
702702

703703
// Check if cancelled after wait
704704
if guard.cancel {
@@ -818,7 +818,7 @@ mod decl {
818818

819819
// Store the state
820820
{
821-
let mut watchdog = WATCHDOG.lock().unwrap();
821+
let mut watchdog = WATCHDOG.lock();
822822
*watchdog = Some(Arc::clone(&state));
823823
}
824824

@@ -833,14 +833,14 @@ mod decl {
833833
#[pyfunction]
834834
fn cancel_dump_traceback_later() {
835835
let state = {
836-
let mut watchdog = WATCHDOG.lock().unwrap();
836+
let mut watchdog = WATCHDOG.lock();
837837
watchdog.take()
838838
};
839839

840840
if let Some(state) = state {
841841
let (lock, cvar) = &*state;
842842
{
843-
let mut guard = lock.lock().unwrap();
843+
let mut guard = lock.lock();
844844
guard.cancel = true;
845845
}
846846
cvar.notify_all();
@@ -849,7 +849,7 @@ mod decl {
849849

850850
#[cfg(unix)]
851851
mod user_signals {
852-
use std::sync::Mutex;
852+
use parking_lot::Mutex;
853853

854854
const NSIG: usize = 64;
855855

@@ -878,12 +878,12 @@ mod decl {
878878
static USER_SIGNALS: Mutex<Option<Vec<UserSignal>>> = Mutex::new(None);
879879

880880
pub fn get_user_signal(signum: usize) -> Option<UserSignal> {
881-
let guard = USER_SIGNALS.lock().unwrap();
881+
let guard = USER_SIGNALS.lock();
882882
guard.as_ref().and_then(|v| v.get(signum).cloned())
883883
}
884884

885885
pub fn set_user_signal(signum: usize, signal: UserSignal) {
886-
let mut guard = USER_SIGNALS.lock().unwrap();
886+
let mut guard = USER_SIGNALS.lock();
887887
if guard.is_none() {
888888
*guard = Some(vec![UserSignal::default(); NSIG]);
889889
}
@@ -895,7 +895,7 @@ mod decl {
895895
}
896896

897897
pub fn clear_user_signal(signum: usize) -> Option<UserSignal> {
898-
let mut guard = USER_SIGNALS.lock().unwrap();
898+
let mut guard = USER_SIGNALS.lock();
899899
if let Some(ref mut v) = *guard
900900
&& signum < v.len()
901901
&& v[signum].enabled
@@ -908,7 +908,7 @@ mod decl {
908908
}
909909

910910
pub fn is_enabled(signum: usize) -> bool {
911-
let guard = USER_SIGNALS.lock().unwrap();
911+
let guard = USER_SIGNALS.lock();
912912
guard
913913
.as_ref()
914914
.and_then(|v| v.get(signum))

0 commit comments

Comments
 (0)