1) Place both increfs and decrefs behind a single mutex, rather than two. Even uncontended mutexes aren't free to acquire.
2) Keep a dirty tracking bool to avoid acquiring any mutexes at all in the common case of no modifications (because everything happened with the GIL held)
When using rust after this commit
1a491e2304
the target family for wasm targets is now set to "wasm". Also fix the
assumption that OsStrExt lives inside std::os::unix for all non-windows
targets.
* expanded freelist docs
* added check_signals doc example
* added doc examples for pyany methods
* doc examples for pymodule + deprecate add_wrapped
* fixed tabs+whitespace...
* stronger wording on running signal handler code
Co-authored-by: Georg Brandl <georg@python.org>
* fix keyboardinterrupt spelling
Co-authored-by: Georg Brandl <georg@python.org>
* remove semicolon
Co-authored-by: Georg Brandl <georg@python.org>
* add space
Co-authored-by: Georg Brandl <georg@python.org>
* add space
Co-authored-by: Georg Brandl <georg@python.org>
* added suggested changes
* fixed doctest
* fixed triple backslash
Co-authored-by: David Hewitt <1939362+davidhewitt@users.noreply.github.com>
* spacing inside struct
Co-authored-by: David Hewitt <1939362+davidhewitt@users.noreply.github.com>
* use ? rather than unwrap in doc examples
Co-authored-by: David Hewitt <1939362+davidhewitt@users.noreply.github.com>
* remove use of "we", "us", "you" from docs
Co-authored-by: David Hewitt <1939362+davidhewitt@users.noreply.github.com>
* add that freelist shouldnt be impl'd by users
* added suggested changes
Co-authored-by: Georg Brandl <georg@python.org>
Co-authored-by: David Hewitt <1939362+davidhewitt@users.noreply.github.com>
The change to wrap_pyfunction!() in #1143 makes it impossible to
implement `context.add_wrapped(wrap_pyfunction!(something))` in
`inline-python`.
`context` does not carry the GIL lifetime, which causes type deduction
trouble now that `wrap_pyfunction` results in a generic function.
```
error[E0308]: mismatched types
--> examples/rust-fn.rs:12:4
|
12 | c.add_wrapped(wrap_pyfunction!(rust_print));
| ^^^^^^^^^^^ one type is more general than the other
|
= note: expected enum `Result<&pyo3::types::PyCFunction, _>`
found enum `Result<&pyo3::types::PyCFunction, _>`
```
By re-wrapping the function as a closure, we trigger 'closure signature
deduction' when passing `wrap_pyfunction!()` as an argument to a
function: Rustc will deduce the signature of the closure from the
function that closure is passed to. This way, the generic arguments can
be deduced in more contexts, fixing the problem.