pygobject r970 - in trunk: . gobject
- From: paulp svn gnome org
- To: svn-commits-list gnome org
- Subject: pygobject r970 - in trunk: . gobject
- Date: Tue, 9 Sep 2008 21:24:34 +0000 (UTC)
Author: paulp
Date: Tue Sep 9 21:24:34 2008
New Revision: 970
URL: http://svn.gnome.org/viewvc/pygobject?rev=970&view=rev
Log:
2008-09-10 Paul Pogonyshev <pogonyshev gmx net>
Bug 530935 â pygobject_set_properties doesnt release the GIL
* gobject/pygobject.c (pygobject_set_properties): Reuse
set_property_from_pspec() which release GIL for us. Also make
sure that g_object_thaw_notify() is called even after error.
Modified:
trunk/ChangeLog
trunk/gobject/pygobject.c
Modified: trunk/gobject/pygobject.c
==============================================================================
--- trunk/gobject/pygobject.c (original)
+++ trunk/gobject/pygobject.c Tue Sep 9 21:24:34 2008
@@ -1294,6 +1294,7 @@
Py_ssize_t pos;
PyObject *value;
PyObject *key;
+ PyObject *result = NULL;
CHECK_GOBJECT(self);
@@ -1303,38 +1304,30 @@
pos = 0;
while (kwargs && PyDict_Next (kwargs, &pos, &key, &value)) {
- gchar *key_str = _PyUnicode_AsString (key);
- GParamSpec *pspec;
- GValue gvalue ={ 0, };
+ gchar *key_str = _PyUnicode_AsString(key);
+ GParamSpec *pspec;
- pspec = g_object_class_find_property (class, key_str);
- if (!pspec) {
+ pspec = g_object_class_find_property(class, key_str);
+ if (!pspec) {
gchar buf[512];
g_snprintf(buf, sizeof(buf),
"object `%s' doesn't support property `%s'",
g_type_name(G_OBJECT_TYPE(self->obj)), key_str);
PyErr_SetString(PyExc_TypeError, buf);
- return NULL;
+ goto exit;
}
- g_value_init(&gvalue, G_PARAM_SPEC_VALUE_TYPE(pspec));
- if (pyg_value_from_pyobject(&gvalue, value)) {
- gchar buf[512];
-
- g_snprintf(buf, sizeof(buf),
- "could not convert value for property `%s'", key_str);
- PyErr_SetString(PyExc_TypeError, buf);
- return NULL;
- }
- g_object_set_property(G_OBJECT(self->obj), key_str, &gvalue);
- g_value_unset(&gvalue);
+ if (!set_property_from_pspec(G_OBJECT(self->obj), key_str, pspec, value))
+ goto exit;
}
- g_object_thaw_notify (G_OBJECT(self->obj));
+ result = Py_None;
- Py_INCREF(Py_None);
- return Py_None;
+ exit:
+ g_object_thaw_notify (G_OBJECT(self->obj));
+ Py_XINCREF(result);
+ return result;
}
static PyObject *
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]