Apparently, PySet_Add does not steal a reference, hence we should not forget to clean up ours.

This commit is contained in:
Adam Reichold 2023-07-02 20:05:18 +02:00
parent 135535e668
commit e006b34b5e
3 changed files with 5 additions and 4 deletions

View File

@ -0,0 +1 @@
Fix memory leak when creating `PySet` or `PyFrozenSet` or returning types converted into these internally, e.g. `HashSet` or `BTreeSet`.

View File

@ -2,7 +2,7 @@
use crate::types::PyIterator;
use crate::{
err::{self, PyErr, PyResult},
IntoPyPointer, Py, PyObject,
Py, PyObject,
};
use crate::{ffi, AsPyPointer, PyAny, Python, ToPyObject};
@ -209,7 +209,7 @@ pub(crate) fn new_from_iter<T: ToPyObject>(
for obj in elements {
unsafe {
err::error_on_minusone(py, ffi::PySet_Add(ptr, obj.into_ptr()))?;
err::error_on_minusone(py, ffi::PySet_Add(ptr, obj.as_ptr()))?;
}
}

View File

@ -2,7 +2,7 @@
use crate::types::PyIterator;
use crate::{
err::{self, PyErr, PyResult},
IntoPyPointer, Py,
Py,
};
use crate::{ffi, AsPyPointer, PyAny, PyObject, Python, ToPyObject};
use std::ptr;
@ -260,7 +260,7 @@ pub(crate) fn new_from_iter<T: ToPyObject>(
for obj in elements {
unsafe {
err::error_on_minusone(py, ffi::PySet_Add(ptr, obj.into_ptr()))?;
err::error_on_minusone(py, ffi::PySet_Add(ptr, obj.as_ptr()))?;
}
}