summaryrefslogtreecommitdiff
path: root/gtk/pygtktreemodel.c
diff options
context:
space:
mode:
authorJohan Dahlin <johan@src.gnome.org>2004-08-03 14:11:46 +0000
committerJohan Dahlin <johan@src.gnome.org>2004-08-03 14:11:46 +0000
commit354412b9f37fc8d59bd539d72d3294acf68436ce (patch)
treefe128f01b4dd511aa7643788d31317828c287465 /gtk/pygtktreemodel.c
parent111891a45e1bd9513d197710e0d99d78b177be9d (diff)
downloadpygtk-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.c181
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