Use a const initializer for GIL_COUNT
if possible.
This commit is contained in:
parent
a3c4fd2fa0
commit
dee45d3644
|
@ -156,6 +156,11 @@ pub fn print_feature_cfgs() {
|
|||
if rustc_minor_version >= 53 {
|
||||
println!("cargo:rustc-cfg=option_insert");
|
||||
}
|
||||
|
||||
// Enable use of const initializer for thread_local! on Rust 1.59 and greater
|
||||
if rustc_minor_version >= 59 {
|
||||
println!("cargo:rustc-cfg=thread_local_const_init");
|
||||
}
|
||||
}
|
||||
|
||||
/// Private exports used in PyO3's build.rs
|
||||
|
|
18
src/gil.rs
18
src/gil.rs
|
@ -10,15 +10,29 @@ use std::{mem, ptr::NonNull, sync::atomic};
|
|||
|
||||
static START: Once = Once::new();
|
||||
|
||||
thread_local! {
|
||||
cfg_if::cfg_if! {
|
||||
if #[cfg(thread_local_const_init)] {
|
||||
use std::thread_local as thread_local_const_init;
|
||||
} else {
|
||||
macro_rules! thread_local_const_init {
|
||||
($(#[$attr:meta])* static $name:ident: $ty:ty = const { $init:expr };) => (
|
||||
thread_local! { $(#[$attr])* static $name: $ty = $init; }
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
thread_local_const_init! {
|
||||
/// This is an internal counter in pyo3 monitoring whether this thread has the GIL.
|
||||
///
|
||||
/// It will be incremented whenever a GILGuard or GILPool is created, and decremented whenever
|
||||
/// they are dropped.
|
||||
///
|
||||
/// As a result, if this thread has the GIL, GIL_COUNT is greater than zero.
|
||||
static GIL_COUNT: Cell<usize> = Cell::new(0);
|
||||
static GIL_COUNT: Cell<usize> = const { Cell::new(0) };
|
||||
}
|
||||
|
||||
thread_local! {
|
||||
/// Temporarily hold objects that will be released when the GILPool drops.
|
||||
static OWNED_OBJECTS: RefCell<Vec<NonNull<ffi::PyObject>>> = RefCell::new(Vec::with_capacity(256));
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue