Skip to main content

pyo3_ffi/cpython/
critical_section.rs

1#[cfg(any(Py_3_14, Py_GIL_DISABLED))]
2use crate::PyMutex;
3use crate::PyObject;
4
5#[repr(C)]
6#[cfg(Py_GIL_DISABLED)]
7pub struct PyCriticalSection {
8    _cs_prev: usize,
9    _cs_mutex: *mut PyMutex,
10}
11
12#[repr(C)]
13#[cfg(Py_GIL_DISABLED)]
14pub struct PyCriticalSection2 {
15    _cs_base: PyCriticalSection,
16    _cs_mutex2: *mut PyMutex,
17}
18
19#[cfg(not(Py_GIL_DISABLED))]
20opaque_struct!(pub PyCriticalSection);
21
22#[cfg(not(Py_GIL_DISABLED))]
23opaque_struct!(pub PyCriticalSection2);
24
25extern_libpython! {
26    pub fn PyCriticalSection_Begin(c: *mut PyCriticalSection, op: *mut PyObject);
27    #[cfg(Py_3_14)]
28    pub fn PyCriticalSection_BeginMutex(c: *mut PyCriticalSection, m: *mut PyMutex);
29    pub fn PyCriticalSection_End(c: *mut PyCriticalSection);
30    pub fn PyCriticalSection2_Begin(c: *mut PyCriticalSection2, a: *mut PyObject, b: *mut PyObject);
31    #[cfg(Py_3_14)]
32    pub fn PyCriticalSection2_BeginMutex(
33        c: *mut PyCriticalSection2,
34        m1: *mut PyMutex,
35        m2: *mut PyMutex,
36    );
37    pub fn PyCriticalSection2_End(c: *mut PyCriticalSection2);
38}
⚠️ Internal Docs ⚠️ Not Public API 👉 Official Docs Here