summaryrefslogtreecommitdiff
path: root/gi/pygi-boxed.c
diff options
context:
space:
mode:
authorSimon Feltman <sfeltman@src.gnome.org>2012-11-11 22:26:19 -0800
committerSimon Feltman <sfeltman@src.gnome.org>2012-11-11 23:11:38 -0800
commitdf589458358d7e7bf178dff4e6ad937a70f806e3 (patch)
tree1c677242eb66f1155714ab85f0109ddd4b062172 /gi/pygi-boxed.c
parentc01c95b9fb3d726385efac945f6d1270ae65d109 (diff)
downloadpygobject-df589458358d7e7bf178dff4e6ad937a70f806e3.tar.gz
Fix leaks with GValues holding boxed and object types
Expose read access to PyGIBoxed.free_on_dealloc. Add GObject.Value.__del__ override and call unset() to correctly free reference counts. https://bugzilla.gnome.org/show_bug.cgi?id=688137
Diffstat (limited to 'gi/pygi-boxed.c')
-rw-r--r--gi/pygi-boxed.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/gi/pygi-boxed.c b/gi/pygi-boxed.c
index 2fd446c5..ff3db9b1 100644
--- a/gi/pygi-boxed.c
+++ b/gi/pygi-boxed.c
@@ -165,6 +165,17 @@ _pygi_boxed_new (PyTypeObject *type,
return (PyObject *) self;
}
+static PyObject *
+_pygi_boxed_get_free_on_dealloc(PyGIBoxed *self, void *closure)
+{
+ return PyBool_FromLong( ((PyGBoxed *)self)->free_on_dealloc );
+}
+
+static PyGetSetDef pygi_boxed_getsets[] = {
+ { "_free_on_dealloc", (getter)_pygi_boxed_get_free_on_dealloc, (setter)0 },
+ { NULL, 0, 0 }
+};
+
void
_pygi_boxed_register_types (PyObject *m)
{
@@ -174,6 +185,7 @@ _pygi_boxed_register_types (PyObject *m)
PyGIBoxed_Type.tp_init = (initproc) _boxed_init;
PyGIBoxed_Type.tp_dealloc = (destructor) _boxed_dealloc;
PyGIBoxed_Type.tp_flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE);
+ PyGIBoxed_Type.tp_getset = pygi_boxed_getsets;
if (PyType_Ready (&PyGIBoxed_Type))
return;