diff options
author | Johan Dahlin <johan@src.gnome.org> | 2004-08-03 14:11:46 +0000 |
---|---|---|
committer | Johan Dahlin <johan@src.gnome.org> | 2004-08-03 14:11:46 +0000 |
commit | 354412b9f37fc8d59bd539d72d3294acf68436ce (patch) | |
tree | fe128f01b4dd511aa7643788d31317828c287465 /gtk/pygtktreemodel.c | |
parent | 111891a45e1bd9513d197710e0d99d78b177be9d (diff) | |
download | pygtk-354412b9f37fc8d59bd539d72d3294acf68436ce.tar.gz |
Clean up most functions here to have only one return path.
* gtk/pygtktreemodel.c: Clean up most functions here to have only
one return path.
* gobject/pygobject.c (pygobject_emit): Protect g_value_unset by
UNBLOCK/BLOCK_THREADS since it might call pygobject_free which
will result in a deadlock.
* gobject/gobjectmodule.c (pyg_thread_init): New function, move
thread initalization stuff in here.
* All over the place: Kill pyg_block/unblock_threads and use
PyGILState and Py_BEGIN/END_ALLOW_THREADS.
unblock [code] block calls are replaced by Py_BEGIN/END and
block [code] unblock calls are replaced by PyGILState.
Diffstat (limited to 'gtk/pygtktreemodel.c')
-rw-r--r-- | gtk/pygtktreemodel.c | 181 |
1 files changed, 63 insertions, 118 deletions
diff --git a/gtk/pygtktreemodel.c b/gtk/pygtktreemodel.c index ebcb6b78..51edeea0 100644 --- a/gtk/pygtktreemodel.c +++ b/gtk/pygtktreemodel.c @@ -222,10 +222,9 @@ pygtk_generic_tree_model_get_flags(GtkTreeModel *tree_model) { PyGILState_STATE state; PyObject *self, *py_ret; - + guint ret = 0; g_return_val_if_fail(PYGTK_IS_GENERIC_TREE_MODEL(tree_model), 0); - pyg_block_threads(); state = PyGILState_Ensure(); /* this call finds the wrapper for this GObject */ @@ -237,18 +236,14 @@ pygtk_generic_tree_model_get_flags(GtkTreeModel *tree_model) py_ret = PyObject_CallMethod(self, METHOD_PREFIX "get_flags", ""); Py_DECREF(self); if (py_ret) { - guint ret = PyInt_AsLong(py_ret); - + ret = PyInt_AsLong(py_ret); Py_DECREF(py_ret); - PyGILState_Release(state); - pyg_unblock_threads(); - return ret; } else { PyErr_Print(); - PyGILState_Release(state); - pyg_unblock_threads(); - return 0; } + + PyGILState_Release(state); + return ret; } static gint @@ -256,11 +251,11 @@ pygtk_generic_tree_model_get_n_columns(GtkTreeModel *tree_model) { PyGILState_STATE state; PyObject *self, *py_ret; - + gint ret = 0; + g_return_val_if_fail(tree_model != NULL, 0); g_return_val_if_fail(PYGTK_IS_GENERIC_TREE_MODEL(tree_model), 0); - pyg_block_threads(); state = PyGILState_Ensure(); /* this call finds the wrapper for this GObject */ @@ -272,18 +267,13 @@ pygtk_generic_tree_model_get_n_columns(GtkTreeModel *tree_model) py_ret = PyObject_CallMethod(self, METHOD_PREFIX "get_n_columns", ""); Py_DECREF(self); if (py_ret) { - gint ret = PyInt_AsLong(py_ret); - + ret = PyInt_AsLong(py_ret); Py_DECREF(py_ret); - PyGILState_Release(state); - pyg_unblock_threads(); - return ret; } else { PyErr_Print(); - PyGILState_Release(state); - pyg_unblock_threads(); - return 0; } + PyGILState_Release(state); + return ret; } static GType @@ -291,10 +281,10 @@ pygtk_generic_tree_model_get_column_type(GtkTreeModel *tree_model, gint index) { PyGILState_STATE state; PyObject *self, *py_ret; - + GType ret = G_TYPE_INVALID; + g_return_val_if_fail(tree_model != NULL, G_TYPE_INVALID); g_return_val_if_fail(PYGTK_IS_GENERIC_TREE_MODEL(tree_model), G_TYPE_INVALID); - pyg_block_threads(); state = PyGILState_Ensure(); /* this call finds the wrapper for this GObject */ @@ -307,18 +297,13 @@ pygtk_generic_tree_model_get_column_type(GtkTreeModel *tree_model, gint index) "(i)", index); Py_DECREF(self); if (py_ret) { - GType ret = pyg_type_from_object(py_ret); - + ret = pyg_type_from_object(py_ret); Py_DECREF(py_ret); - PyGILState_Release(state); - pyg_unblock_threads(); - return ret; } else { PyErr_Print(); - PyGILState_Release(state); - pyg_unblock_threads(); - return G_TYPE_INVALID; } + PyGILState_Release(state); + return ret; } static gboolean @@ -327,13 +312,13 @@ pygtk_generic_tree_model_get_iter(GtkTreeModel *tree_model, { PyGILState_STATE state; PyObject *self, *py_path, *py_ret; - + gboolean ret = FALSE; + g_return_val_if_fail(tree_model != NULL, FALSE); g_return_val_if_fail(PYGTK_IS_GENERIC_TREE_MODEL(tree_model), FALSE); g_return_val_if_fail(iter != NULL, FALSE); g_return_val_if_fail(path != NULL, FALSE); - pyg_block_threads(); state = PyGILState_Ensure(); /* this call finds the wrapper for this GObject */ @@ -355,23 +340,18 @@ pygtk_generic_tree_model_get_iter(GtkTreeModel *tree_model, if (!PYGTK_GENERIC_TREE_MODEL(tree_model)->leak_references) { Py_DECREF((PyObject *)iter->user_data); } - PyGILState_Release(state); - pyg_unblock_threads(); - return TRUE; + ret = TRUE; } else { iter->user_data = NULL; Py_DECREF(py_ret); - PyGILState_Release(state); - pyg_unblock_threads(); - return FALSE; } } else { PyErr_Print(); iter->user_data = NULL; - PyGILState_Release(state); - pyg_unblock_threads(); - return FALSE; } + + PyGILState_Release(state); + return ret; } static GtkTreePath * @@ -379,12 +359,12 @@ pygtk_generic_tree_model_get_path(GtkTreeModel *tree_model, GtkTreeIter *iter) { PyGILState_STATE state; PyObject *self, *py_ret, *py_iter; - + GtkTreePath *path = NULL; + g_return_val_if_fail(tree_model != NULL, NULL); g_return_val_if_fail(PYGTK_IS_GENERIC_TREE_MODEL(tree_model), NULL); g_return_val_if_fail(VALID_ITER(iter, tree_model), NULL); - pyg_block_threads(); state = PyGILState_Ensure(); /* this call finds the wrapper for this GObject */ @@ -401,21 +381,18 @@ pygtk_generic_tree_model_get_path(GtkTreeModel *tree_model, GtkTreeIter *iter) py_iter); Py_DECREF(self); if (py_ret) { - GtkTreePath *path = pygtk_tree_path_from_pyobject(py_ret); + path = pygtk_tree_path_from_pyobject(py_ret); if (!path) g_warning("could not convert return value of get_path() to " "a GtkTreePath"); Py_DECREF(py_ret); - PyGILState_Release(state); - pyg_unblock_threads(); - return path; } else { PyErr_Print(); - PyGILState_Release(state); - pyg_unblock_threads(); - return NULL; } + + PyGILState_Release(state); + return path; } static void @@ -429,7 +406,6 @@ pygtk_generic_tree_model_get_value(GtkTreeModel*tree_model, GtkTreeIter *iter, g_return_if_fail(PYGTK_IS_GENERIC_TREE_MODEL(tree_model)); g_return_if_fail(VALID_ITER(iter, tree_model)); - pyg_block_threads(); state = PyGILState_Ensure(); /* this call finds the wrapper for this GObject */ @@ -458,7 +434,6 @@ pygtk_generic_tree_model_get_value(GtkTreeModel*tree_model, GtkTreeIter *iter, PyErr_Print(); } PyGILState_Release(state); - pyg_unblock_threads(); } static gboolean @@ -466,12 +441,12 @@ pygtk_generic_tree_model_iter_next(GtkTreeModel *tree_model, GtkTreeIter *iter) { PyGILState_STATE state; PyObject *self, *py_ret, *py_iter; - + gboolean ret = FALSE; + g_return_val_if_fail(tree_model != NULL, FALSE); g_return_val_if_fail(PYGTK_IS_GENERIC_TREE_MODEL(tree_model), FALSE); g_return_val_if_fail(VALID_ITER(iter, tree_model), FALSE); - pyg_block_threads(); state = PyGILState_Ensure(); /* this call finds the wrapper for this GObject */ @@ -494,23 +469,18 @@ pygtk_generic_tree_model_iter_next(GtkTreeModel *tree_model, GtkTreeIter *iter) if (!PYGTK_GENERIC_TREE_MODEL(tree_model)->leak_references) { Py_DECREF((PyObject *)iter->user_data); } - PyGILState_Release(state); - pyg_unblock_threads(); - return TRUE; + ret = TRUE; } else { iter->user_data = NULL; Py_DECREF(py_ret); - PyGILState_Release(state); - pyg_unblock_threads(); - return FALSE; } } else { iter->user_data = NULL; PyErr_Print(); - PyGILState_Release(state); - pyg_unblock_threads(); - return FALSE; } + + PyGILState_Release(state); + return ret; } static gboolean @@ -520,13 +490,13 @@ pygtk_generic_tree_model_iter_children(GtkTreeModel *tree_model, { PyGILState_STATE state; PyObject *self, *py_ret, *py_parent = Py_None; - + gboolean ret = FALSE; + g_return_val_if_fail(tree_model != NULL, FALSE); g_return_val_if_fail(PYGTK_IS_GENERIC_TREE_MODEL(tree_model), FALSE); g_return_val_if_fail(iter != NULL, FALSE); g_return_val_if_fail(parent == NULL || parent->stamp == PYGTK_GENERIC_TREE_MODEL(tree_model)->stamp, FALSE); - pyg_block_threads(); state = PyGILState_Ensure(); /* this call finds the wrapper for this GObject */ @@ -548,23 +518,18 @@ pygtk_generic_tree_model_iter_children(GtkTreeModel *tree_model, if (!PYGTK_GENERIC_TREE_MODEL(tree_model)->leak_references) { Py_DECREF((PyObject *)iter->user_data); } - PyGILState_Release(state); - pyg_unblock_threads(); - return TRUE; + ret = TRUE; } else { iter->user_data = NULL; Py_DECREF(py_ret); - PyGILState_Release(state); - pyg_unblock_threads(); - return FALSE; } } else { iter->user_data = NULL; PyErr_Print(); - PyGILState_Release(state); - pyg_unblock_threads(); - return FALSE; } + + PyGILState_Release(state); + return ret; } static gboolean @@ -573,12 +538,12 @@ pygtk_generic_tree_model_iter_has_child(GtkTreeModel *tree_model, { PyGILState_STATE state; PyObject *self, *py_ret, *py_iter; - + gboolean ret = FALSE; + g_return_val_if_fail(tree_model != NULL, FALSE); g_return_val_if_fail(PYGTK_IS_GENERIC_TREE_MODEL(tree_model), FALSE); g_return_val_if_fail(VALID_ITER(iter, tree_model), FALSE); - pyg_block_threads(); state = PyGILState_Ensure(); /* this call finds the wrapper for this GObject */ @@ -595,18 +560,15 @@ pygtk_generic_tree_model_iter_has_child(GtkTreeModel *tree_model, "(O)", py_iter); Py_DECREF(self); if (py_ret) { - gboolean ret = PyObject_IsTrue(py_ret); + ret = PyObject_IsTrue(py_ret); Py_DECREF(py_ret); - PyGILState_Release(state); - pyg_unblock_threads(); - return ret; } else { PyErr_Print(); - PyGILState_Release(state); - pyg_unblock_threads(); - return FALSE; } + + PyGILState_Release(state); + return ret; } static gint @@ -615,12 +577,12 @@ pygtk_generic_tree_model_iter_n_children(GtkTreeModel *tree_model, { PyGILState_STATE state; PyObject *self, *py_ret, *py_iter; - + guint ret = FALSE; + g_return_val_if_fail(tree_model != NULL, 0); g_return_val_if_fail(PYGTK_IS_GENERIC_TREE_MODEL(tree_model), 0); g_return_val_if_fail(iter == NULL || iter->stamp == PYGTK_GENERIC_TREE_MODEL(tree_model)->stamp, 0); - pyg_block_threads(); state = PyGILState_Ensure(); /* this call finds the wrapper for this GObject */ @@ -636,18 +598,15 @@ pygtk_generic_tree_model_iter_n_children(GtkTreeModel *tree_model, "(O)", py_iter); Py_DECREF(self); if (py_ret) { - gint ret = PyInt_AsLong(py_ret); + ret = PyInt_AsLong(py_ret); Py_DECREF(py_ret); - PyGILState_Release(state); - pyg_unblock_threads(); - return ret; } else { PyErr_Print(); - PyGILState_Release(state); - pyg_unblock_threads(); - return 0; } + + PyGILState_Release(state); + return ret; } static gboolean @@ -657,13 +616,13 @@ pygtk_generic_tree_model_iter_nth_child(GtkTreeModel *tree_model, { PyGILState_STATE state; PyObject *self, *py_ret, *py_parent = Py_None; - + gboolean ret = FALSE; + g_return_val_if_fail(tree_model != NULL, FALSE); g_return_val_if_fail(PYGTK_IS_GENERIC_TREE_MODEL(tree_model), FALSE); g_return_val_if_fail(iter != NULL, FALSE); g_return_val_if_fail(parent == NULL || parent->stamp == PYGTK_GENERIC_TREE_MODEL(tree_model)->stamp, FALSE); - pyg_block_threads(); state = PyGILState_Ensure(); /* this call finds the wrapper for this GObject */ @@ -685,23 +644,18 @@ pygtk_generic_tree_model_iter_nth_child(GtkTreeModel *tree_model, if (!PYGTK_GENERIC_TREE_MODEL(tree_model)->leak_references) { Py_DECREF((PyObject *)iter->user_data); } - PyGILState_Release(state); - pyg_unblock_threads(); - return TRUE; + ret = TRUE; } else { iter->user_data = NULL; Py_DECREF(py_ret); - PyGILState_Release(state); - pyg_unblock_threads(); - return FALSE; } } else { iter->user_data = NULL; PyErr_Print(); - PyGILState_Release(state); - pyg_unblock_threads(); - return FALSE; } + + PyGILState_Release(state); + return ret; } static gboolean @@ -711,13 +665,13 @@ pygtk_generic_tree_model_iter_parent(GtkTreeModel *tree_model, { PyGILState_STATE state; PyObject *self, *py_ret, *py_child = Py_None; - + gboolean ret = FALSE; + g_return_val_if_fail(tree_model != NULL, FALSE); g_return_val_if_fail(PYGTK_IS_GENERIC_TREE_MODEL(tree_model), FALSE); g_return_val_if_fail(iter != NULL, FALSE); g_return_val_if_fail(VALID_ITER(child, tree_model), FALSE); - pyg_block_threads(); state = PyGILState_Ensure(); /* this call finds the wrapper for this GObject */ @@ -739,23 +693,18 @@ pygtk_generic_tree_model_iter_parent(GtkTreeModel *tree_model, if (!PYGTK_GENERIC_TREE_MODEL(tree_model)->leak_references) { Py_DECREF((PyObject *)iter->user_data); } - PyGILState_Release(state); - pyg_unblock_threads(); - return TRUE; + ret = TRUE; } else { iter->user_data = NULL; Py_DECREF(py_ret); - PyGILState_Release(state); - pyg_unblock_threads(); - return FALSE; } } else { iter->user_data = NULL; PyErr_Print(); - PyGILState_Release(state); - pyg_unblock_threads(); - return FALSE; } + + PyGILState_Release(state); + return ret; } static void @@ -768,7 +717,6 @@ pygtk_generic_tree_model_unref_node(GtkTreeModel *tree_model, GtkTreeIter *iter) g_return_if_fail(PYGTK_IS_GENERIC_TREE_MODEL(tree_model)); g_return_if_fail(VALID_ITER(iter, tree_model)); - pyg_block_threads(); state = PyGILState_Ensure(); /* this call finds the wrapper for this GObject */ @@ -795,7 +743,6 @@ pygtk_generic_tree_model_unref_node(GtkTreeModel *tree_model, GtkTreeIter *iter) Py_DECREF(self); PyGILState_Release(state); - pyg_unblock_threads(); } static void @@ -808,7 +755,6 @@ pygtk_generic_tree_model_ref_node(GtkTreeModel *tree_model, GtkTreeIter *iter) g_return_if_fail(PYGTK_IS_GENERIC_TREE_MODEL(tree_model)); g_return_if_fail(VALID_ITER(iter, tree_model)); - pyg_block_threads(); state = PyGILState_Ensure(); /* this call finds the wrapper for this GObject */ @@ -835,7 +781,6 @@ pygtk_generic_tree_model_ref_node(GtkTreeModel *tree_model, GtkTreeIter *iter) Py_DECREF(self); PyGILState_Release(state); - pyg_unblock_threads(); } void |