diff options
Diffstat (limited to 'gobject/pygboxed.c')
| -rw-r--r-- | gobject/pygboxed.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/gobject/pygboxed.c b/gobject/pygboxed.c index 6007c61..208a8a2 100644 --- a/gobject/pygboxed.c +++ b/gobject/pygboxed.c @@ -8,8 +8,11 @@ static void pyg_boxed_dealloc(PyGBoxed *self) { - if (self->free_on_dealloc && self->boxed) + if (self->free_on_dealloc && self->boxed) { + pyg_unblock_threads(); g_boxed_free(self->gtype, self->boxed); + pyg_block_threads(); + } self->ob_type->tp_free((PyObject *)self); } @@ -166,8 +169,11 @@ pyg_boxed_new(GType boxed_type, gpointer boxed, gboolean copy_boxed, g_return_val_if_fail(boxed_type != 0, NULL); g_return_val_if_fail(!copy_boxed || (copy_boxed && own_ref), NULL); + pyg_block_threads(); + if (!boxed) { Py_INCREF(Py_None); + pyg_unblock_threads(); return Py_None; } @@ -176,8 +182,10 @@ pyg_boxed_new(GType boxed_type, gpointer boxed, gboolean copy_boxed, tp = (PyTypeObject *)&PyGBoxed_Type; /* fallback */ self = PyObject_NEW(PyGBoxed, tp); - if (self == NULL) - return NULL; + if (self == NULL) { + pyg_unblock_threads(); + return NULL; + } if (copy_boxed) boxed = g_boxed_copy(boxed_type, boxed); @@ -185,6 +193,8 @@ pyg_boxed_new(GType boxed_type, gpointer boxed, gboolean copy_boxed, self->gtype = boxed_type; self->free_on_dealloc = own_ref; + pyg_unblock_threads(); + return (PyObject *)self; } @@ -330,8 +340,11 @@ pyg_pointer_new(GType pointer_type, gpointer pointer) g_return_val_if_fail(pointer_type != 0, NULL); + pyg_block_threads(); + if (!pointer) { Py_INCREF(Py_None); + pyg_unblock_threads(); return Py_None; } @@ -340,6 +353,8 @@ pyg_pointer_new(GType pointer_type, gpointer pointer) tp = (PyTypeObject *)&PyGPointer_Type; /* fallback */ self = PyObject_NEW(PyGPointer, tp); + pyg_unblock_threads(); + if (self == NULL) return NULL; |
