diff --git a/include/pybind11/numpy.h b/include/pybind11/numpy.h index e67d37151..8b21d3d43 100644 --- a/include/pybind11/numpy.h +++ b/include/pybind11/numpy.h @@ -1044,7 +1044,7 @@ public: static pybind11::dtype dtype() { if (auto ptr = npy_api::get().PyArray_DescrFromType_(value)) - return reinterpret_borrow(ptr); + return reinterpret_steal(ptr); pybind11_fail("Unsupported buffer format!"); } }; diff --git a/tests/test_numpy_array.py b/tests/test_numpy_array.py index 17c87ef7b..d0a6324df 100644 --- a/tests/test_numpy_array.py +++ b/tests/test_numpy_array.py @@ -434,3 +434,14 @@ def test_array_create_and_resize(msg): def test_index_using_ellipsis(): a = m.index_using_ellipsis(np.zeros((5, 6, 7))) assert a.shape == (6,) + + +@pytest.unsupported_on_pypy +def test_dtype_refcount_leak(): + from sys import getrefcount + dtype = np.dtype(np.float_) + a = np.array([1], dtype=dtype) + before = getrefcount(dtype) + m.ndim(a) + after = getrefcount(dtype) + assert after == before