diff --git a/examples/rustapi_module/setup.py b/examples/rustapi_module/setup.py index 69de1de0093..50fb20175e1 100644 --- a/examples/rustapi_module/setup.py +++ b/examples/rustapi_module/setup.py @@ -41,11 +41,12 @@ def make_rust_extension(module_name): rust_extensions=[ make_rust_extension("rustapi_module.buf_and_str"), make_rust_extension("rustapi_module.datetime"), + make_rust_extension("rustapi_module.misc"), make_rust_extension("rustapi_module.objstore"), make_rust_extension("rustapi_module.othermod"), + make_rust_extension("rustapi_module.pyclass_iter"), make_rust_extension("rustapi_module.subclassing"), make_rust_extension("rustapi_module.test_dict"), - make_rust_extension("rustapi_module.pyclass_iter"), ], include_package_data=True, zip_safe=False, diff --git a/examples/rustapi_module/src/datetime.rs b/examples/rustapi_module/src/datetime.rs index 72fba0f01b3..8eaafe18aac 100644 --- a/examples/rustapi_module/src/datetime.rs +++ b/examples/rustapi_module/src/datetime.rs @@ -183,13 +183,6 @@ fn datetime_from_timestamp<'p>( PyDateTime::from_timestamp(py, ts, tz) } -#[pyfunction] -fn issue_219() -> PyResult<()> { - let gil = Python::acquire_gil(); - let _py = gil.python(); - Ok(()) -} - #[pyclass(extends=PyTzInfo)] pub struct TzClass {} @@ -234,7 +227,6 @@ fn datetime(_py: Python<'_>, m: &PyModule) -> PyResult<()> { m.add_function(wrap_pyfunction!(get_datetime_tuple_fold, m)?)?; } - m.add_function(wrap_pyfunction!(issue_219, m)?)?; m.add_class::()?; Ok(()) diff --git a/examples/rustapi_module/src/lib.rs b/examples/rustapi_module/src/lib.rs index ce63565a494..257d31aefe8 100644 --- a/examples/rustapi_module/src/lib.rs +++ b/examples/rustapi_module/src/lib.rs @@ -1,6 +1,7 @@ pub mod buf_and_str; pub mod datetime; pub mod dict_iter; +pub mod misc; pub mod objstore; pub mod othermod; pub mod pyclass_iter; diff --git a/examples/rustapi_module/src/misc.rs b/examples/rustapi_module/src/misc.rs new file mode 100644 index 00000000000..badab06e5b8 --- /dev/null +++ b/examples/rustapi_module/src/misc.rs @@ -0,0 +1,16 @@ +use pyo3::prelude::*; +use pyo3::wrap_pyfunction; + +#[pyfunction] +fn issue_219() -> PyResult<()> { + // issue 219: acquiring GIL inside #[pyfunction] deadlocks. + let gil = Python::acquire_gil(); + let _py = gil.python(); + Ok(()) +} + +#[pymodule] +fn misc(_py: Python<'_>, m: &PyModule) -> PyResult<()> { + m.add_function(wrap_pyfunction!(issue_219, m)?)?; + Ok(()) +} diff --git a/examples/rustapi_module/tests/test_datetime.py b/examples/rustapi_module/tests/test_datetime.py index cfce7ce08b1..1c8312a1a3e 100644 --- a/examples/rustapi_module/tests/test_datetime.py +++ b/examples/rustapi_module/tests/test_datetime.py @@ -293,10 +293,6 @@ def test_delta_err(args, err_type): rdt.make_delta(*args) -def test_issue_219(): - rdt.issue_219() - - def test_tz_class(): tzi = rdt.TzClass() diff --git a/examples/rustapi_module/tests/test_misc.py b/examples/rustapi_module/tests/test_misc.py new file mode 100644 index 00000000000..b4e05dd3534 --- /dev/null +++ b/examples/rustapi_module/tests/test_misc.py @@ -0,0 +1,6 @@ +import rustapi_module.misc + + +def test_issue_219(): + # Should not deadlock + rustapi_module.misc.issue_219()