diff options
author | Christoph Reiter <reiter.christoph@gmail.com> | 2019-01-15 15:38:20 +0100 |
---|---|---|
committer | Christoph Reiter <reiter.christoph@gmail.com> | 2019-01-15 16:42:36 +0100 |
commit | c9f127b8121f3a94eb07bb6e1c95f6f01abe8cb2 (patch) | |
tree | 4b615152cf5206de122047772633e93231005df2 /gi | |
parent | 22656c4bc33e62aa8387df7accb73ad95fc8e8e9 (diff) | |
download | pygobject-c9f127b8121f3a94eb07bb6e1c95f6f01abe8cb2.tar.gz |
Remove GObject.Value.__del__
We can move this into tp_dealloc now.
Only call unset() in the slice allocate case since g_boxed_free() will
do it anyway.
Diffstat (limited to 'gi')
-rw-r--r-- | gi/overrides/GObject.py | 4 | ||||
-rw-r--r-- | gi/pygi-boxed.c | 17 |
2 files changed, 4 insertions, 17 deletions
diff --git a/gi/overrides/GObject.py b/gi/overrides/GObject.py index 4df27ab3..938a19a8 100644 --- a/gi/overrides/GObject.py +++ b/gi/overrides/GObject.py @@ -209,10 +209,6 @@ class Value(GObjectModule.Value): if py_value is not None: self.set_value(py_value) - def __del__(self): - if self._free_on_dealloc and self.g_type != TYPE_INVALID: - self.unset() - def set_boxed(self, boxed): # Workaround the introspection marshalers inability to know # these methods should be marshaling boxed types. This is because diff --git a/gi/pygi-boxed.c b/gi/pygi-boxed.c index 90c57c72..e3b487be 100644 --- a/gi/pygi-boxed.c +++ b/gi/pygi-boxed.c @@ -38,14 +38,17 @@ static void boxed_clear (PyGIBoxed *self) { gpointer boxed = pyg_boxed_get_ptr (self); + GType g_type = ((PyGBoxed *)self)->gtype; if ( ( (PyGBoxed *) self)->free_on_dealloc && boxed != NULL) { if (self->slice_allocated) { + if (g_type && g_type_is_a (g_type, G_TYPE_VALUE)) + g_value_unset (boxed); g_slice_free1 (self->size, boxed); self->slice_allocated = FALSE; self->size = 0; } else { - g_boxed_free (((PyGBoxed *)self)->gtype, boxed); + g_boxed_free (g_type, boxed); } } pyg_boxed_set_ptr (self, NULL); @@ -200,12 +203,6 @@ pygi_boxed_new (PyTypeObject *type, return (PyObject *) self; } -static PyObject * -boxed_get_free_on_dealloc(PyGIBoxed *self, void *closure) -{ - return pygi_gboolean_to_py( ((PyGBoxed *)self)->free_on_dealloc ); -} - /** * pygi_boxed_copy_in_place: * @@ -230,11 +227,6 @@ pygi_boxed_copy_in_place (PyGIBoxed *self) pygboxed->free_on_dealloc = TRUE; } -static PyGetSetDef pygi_boxed_getsets[] = { - { "_free_on_dealloc", (getter)boxed_get_free_on_dealloc, (setter)0 }, - { NULL, 0, 0 } -}; - static PyMethodDef boxed_methods[] = { { "_clear_boxed", (PyCFunction)boxed_clear_wrapper, METH_NOARGS }, { NULL, NULL, 0 } @@ -253,7 +245,6 @@ 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; PyGIBoxed_Type.tp_methods = boxed_methods; if (PyType_Ready (&PyGIBoxed_Type) < 0) |