packages/python/pyalpm/memleak.patch

45 lines
1.3 KiB
Diff

From c02555c5d83e63b1a308e7c165d5615198e6d813 Mon Sep 17 00:00:00 2001
From: Jelle van der Waa <jelle@vdwaa.nl>
Date: Wed, 16 Jan 2019 09:30:28 +0100
Subject: src: dealloc alpm_handle when object goes out of scope
By default alpm_handle is leaked when Handle is out of scope since
alpm_release is never called. Call alpm_release in tp_dealloc to
actually free the alloc'd memory.
---
src/handle.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/src/handle.c b/src/handle.c
index 08853f0..5e196df 100644
--- a/src/handle.c
+++ b/src/handle.c
@@ -377,6 +377,16 @@ static PyMethodDef pyalpm_handle_methods[] = {
{NULL, NULL, 0, NULL},
};
+static void pyalpm_dealloc(PyObject* self) {
+ alpm_handle_t *handle = ALPM_HANDLE(self);
+ int ret = alpm_release(handle);
+ if (ret == -1) {
+ PyErr_Format(alpm_error, "unable to release alpm handle");
+ }
+ handle = NULL;
+ Py_TYPE(self)->tp_free((PyObject *)self);
+}
+
PyTypeObject AlpmHandleType = {
PyVarObject_HEAD_INIT(NULL, 0)
"alpm.Handle", /*tp_name*/
@@ -387,6 +397,7 @@ PyTypeObject AlpmHandleType = {
.tp_methods = pyalpm_handle_methods,
.tp_getset = pyalpm_handle_getset,
.tp_new = pyalpm_initialize,
+ .tp_dealloc = (destructor) pyalpm_dealloc,
};
/** Initializes Handle class in module */
--
cgit v1.2.1-1-g437b