Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
0d3af59
WIP: attempt to add with_critical_section_mutex
ngoldbaum Aug 4, 2025
37aa456
WIP: use an UnsafeCell
ngoldbaum Aug 22, 2025
86664b1
finish UnsafeCell rewrite
ngoldbaum Nov 21, 2025
22023d1
finish and tweak docs
ngoldbaum Nov 21, 2025
f88228d
fix limited API builds
ngoldbaum Nov 21, 2025
858e7ab
fix deadlocks and abi3 compilation errors
ngoldbaum Nov 24, 2025
5f825b7
remove unnecessary comparisons with true
ngoldbaum Nov 24, 2025
a05fa12
add two more tests
ngoldbaum Nov 24, 2025
53d1e2d
add changelog entry
ngoldbaum Nov 24, 2025
f178d12
add missing conditional compilation for new tests
ngoldbaum Nov 24, 2025
7de02eb
add missing conditional compilation for new tests
ngoldbaum Nov 24, 2025
caae6d3
fix conditional compilation in pyo3::sync
ngoldbaum Nov 24, 2025
625be8d
fix Python 3.13 clippy
ngoldbaum Nov 24, 2025
02e2f1d
Update newsfragments/5642.added.md
ngoldbaum Nov 24, 2025
34fdfd0
refactor so to use EnteredCriticalSection struct
ngoldbaum Nov 24, 2025
2294f75
tweak docstrings
ngoldbaum Nov 24, 2025
084f666
Add SAFETY comments in tests
ngoldbaum Nov 24, 2025
88794fe
fix include guards
ngoldbaum Nov 24, 2025
4a22503
remove unnecessary returns
ngoldbaum Nov 24, 2025
9b2a17f
fix whitespace formatting
ngoldbaum Dec 3, 2025
d5e7403
Move note about minimum Python version
ngoldbaum Dec 3, 2025
715faf9
Fix reference leak by adjusting lifetimes
ngoldbaum Dec 3, 2025
aeb3631
Apply suggestions for test tweaks from code review
ngoldbaum Dec 3, 2025
47c3ad6
refactor into a new module and rewrite docs
ngoldbaum Dec 3, 2025
82fd33a
adjust imports to satisfy clippy
ngoldbaum Dec 4, 2025
4dcdc76
Fix EnteredCriticalSection conditinal compilation
ngoldbaum Dec 4, 2025
ab5f665
fix wasm clippy
ngoldbaum Dec 4, 2025
dd2d1c9
add changelog for the moved functions
ngoldbaum Dec 4, 2025
5f7f48c
actually deprecate the old export
ngoldbaum Dec 12, 2025
3a9c51d
refer to locking mutexes and acquiring critical sections consistently
ngoldbaum Dec 12, 2025
ba976ab
remove unnecessary availability note
ngoldbaum Dec 12, 2025
2b6946a
simplify wasm conditional compilation
ngoldbaum Dec 12, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions newsfragments/5642.added.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
added FFI definitions and an unsafe Rust API wrapping `Py_BEGIN_CRITICAL_SECTION_MUTEX` and `Py_BEGIN_CRITICAL_SECTION_MUTEX2`.
1 change: 1 addition & 0 deletions newsfragments/5642.changed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
The `with_critical_section` and `with_critical_section2` functions are now available in `pyo3::sync::critical_section`. Aliases that generate deprecation warnings are available in `pyo3::sync`.
10 changes: 9 additions & 1 deletion pyo3-ffi/src/cpython/critical_section.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#[cfg(Py_GIL_DISABLED)]
#[cfg(any(Py_3_14, Py_GIL_DISABLED))]
use crate::PyMutex;
use crate::PyObject;

Expand All @@ -24,7 +24,15 @@ opaque_struct!(pub PyCriticalSection2);

extern "C" {
pub fn PyCriticalSection_Begin(c: *mut PyCriticalSection, op: *mut PyObject);
#[cfg(Py_3_14)]
pub fn PyCriticalSection_BeginMutex(c: *mut PyCriticalSection, m: *mut PyMutex);
pub fn PyCriticalSection_End(c: *mut PyCriticalSection);
pub fn PyCriticalSection2_Begin(c: *mut PyCriticalSection2, a: *mut PyObject, b: *mut PyObject);
#[cfg(Py_3_14)]
pub fn PyCriticalSection2_BeginMutex(
c: *mut PyCriticalSection2,
m1: *mut PyMutex,
m2: *mut PyMutex,
);
pub fn PyCriticalSection2_End(c: *mut PyCriticalSection2);
}
10 changes: 6 additions & 4 deletions src/conversions/std/num.rs
Original file line number Diff line number Diff line change
Expand Up @@ -342,10 +342,12 @@ impl BytesSequenceExtractor<'_, '_> {

match self {
BytesSequenceExtractor::Bytes(b) => copy_slice(b.as_bytes()),
BytesSequenceExtractor::ByteArray(b) => crate::sync::with_critical_section(b, || {
// Safety: b is protected by a critical section
copy_slice(unsafe { b.as_bytes() })
}),
BytesSequenceExtractor::ByteArray(b) => {
crate::sync::critical_section::with_critical_section(b, || {
// Safety: b is protected by a critical section
copy_slice(unsafe { b.as_bytes() })
})
}
}
}
}
Expand Down
Loading
Loading