diff options
author | Frederic Peters <fpeters@entrouvert.com> | 2008-04-29 12:02:18 +0000 |
---|---|---|
committer | Frederic Peters <fpeters@entrouvert.com> | 2008-04-29 12:02:18 +0000 |
commit | b780cf634ec9f2dc4790a04f4c1b1cdd505c58c2 (patch) | |
tree | aad898ed9510629cec45b2faf0e6b82e43a98587 | |
parent | 43e43c94044154de6f1bb49ddcdb47fd63e82784 (diff) | |
download | lasso-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.py | 13 | ||||
-rw-r--r-- | bindings/lang_python_wrapper_top.c | 6 |
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); } |