summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrederic Peters <fpeters@entrouvert.com>2008-04-29 12:02:18 +0000
committerFrederic Peters <fpeters@entrouvert.com>2008-04-29 12:02:18 +0000
commitb780cf634ec9f2dc4790a04f4c1b1cdd505c58c2 (patch)
treeaad898ed9510629cec45b2faf0e6b82e43a98587
parent43e43c94044154de6f1bb49ddcdb47fd63e82784 (diff)
downloadlasso-b780cf634ec9f2dc4790a04f4c1b1cdd505c58c2.tar.gz
lasso-b780cf634ec9f2dc4790a04f4c1b1cdd505c58c2.tar.xz
lasso-b780cf634ec9f2dc4790a04f4c1b1cdd505c58c2.zip
[project @ fpeters@0d.be-20071006155345-ses0l1suzq229qdq]
fixed refcounting Original author: Frederic Peters <fpeters@0d.be> Date: 2007-10-06 17:53:45.416000+02:00
-rw-r--r--bindings/lang_python.py13
-rw-r--r--bindings/lang_python_wrapper_top.c6
2 files changed, 14 insertions, 5 deletions
diff --git a/bindings/lang_python.py b/bindings/lang_python.py
index c94e75bf..fbaa4695 100644
--- a/bindings/lang_python.py
+++ b/bindings/lang_python.py
@@ -270,7 +270,10 @@ register_constants(PyObject *d)
print >> fd, ' if (! PyArg_ParseTuple(args, "O", &cvt_this)) return NULL;'
print >> fd, ' this = (%s*)cvt_this->obj;' % klassname
- print >> fd, ' return_value = this->%s;' % m[1];
+ if self.is_pygobject(m[0]):
+ print >> fd, ' return_value = g_object_ref(this->%s);' % m[1];
+ else:
+ print >> fd, ' return_value = this->%s;' % m[1];
self.return_value(fd, m[0])
@@ -335,7 +338,7 @@ register_constants(PyObject *d)
elif vtype in ('char*', 'gchar*'):
print >> fd, ' if (return_value) {'
print >> fd, ' return_pyvalue = PyString_FromString(return_value);'
- print >> fd, ' Py_INCREF(return_pyvalue);'
+ #print >> fd, ' Py_INCREF(return_pyvalue);'
print >> fd, ' return return_pyvalue;'
print >> fd, ' } else {'
print >> fd, ' Py_INCREF(Py_None);'
@@ -346,14 +349,14 @@ register_constants(PyObject *d)
print >> fd, '''\
if (return_value) {
return_pyvalue = PyGObjectPtr_New(G_OBJECT(return_value));
- Py_INCREF(return_pyvalue);
+ /*Py_INCREF(return_pyvalue);*/
type_name = PyString_FromString(G_OBJECT_TYPE_NAME(return_value)+5);
- Py_INCREF(type_name);
+ /*Py_INCREF(type_name);*/
return_tuple = PyTuple_New(2);
PyTuple_SetItem(return_tuple, 0, type_name);
PyTuple_SetItem(return_tuple, 1, return_pyvalue);
return_pyvalue = return_tuple;
- Py_INCREF(return_pyvalue);
+ /*Py_INCREF(return_pyvalue);*/
return return_pyvalue;
} else {
Py_INCREF(Py_None);
diff --git a/bindings/lang_python_wrapper_top.c b/bindings/lang_python_wrapper_top.c
index d1d3713a..f3ef9380 100644
--- a/bindings/lang_python_wrapper_top.c
+++ b/bindings/lang_python_wrapper_top.c
@@ -14,6 +14,12 @@ static PyTypeObject PyGObjectPtrType;
static void
PyGObjectPtr_dealloc(PyGObjectPtr *self)
{
+#ifdef LASSO_DEBUG
+ fprintf(stderr, "dealloc (%p ptr to %p (type:%s, rc:%d))\n",
+ self, self->obj,
+ G_OBJECT_TYPE_NAME(self->obj),
+ self->obj->ref_count);
+#endif
g_object_unref(self->obj);
self->ob_type->tp_free((PyObject*)self);
}