numpy: fix refcount leak to dtype singleton (#1860)

PyArray_DescrFromType returns a new reference, not borrowed one
This commit is contained in:
Pauli Virtanen 2019-07-27 09:35:32 +00:00 committed by Wenzel Jakob
parent 4a3464fd88
commit c9d32a81f4
2 changed files with 12 additions and 1 deletions

View File

@ -1044,7 +1044,7 @@ public:
static pybind11::dtype dtype() {
if (auto ptr = npy_api::get().PyArray_DescrFromType_(value))
return reinterpret_borrow<pybind11::dtype>(ptr);
return reinterpret_steal<pybind11::dtype>(ptr);
pybind11_fail("Unsupported buffer format!");
}
};

View File

@ -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