diff options
author | Renato Filho <renato.filho@openbossa.org> | 2011-05-13 17:47:49 -0300 |
---|---|---|
committer | Hugo Parente Lima <hugo.pl@gmail.com> | 2012-03-08 16:15:23 -0300 |
commit | 510e7af9a0e9a8b8c0b90ad76453d9ccdf55aedb (patch) | |
tree | e1a3caaf4e47249941da5cf88c8f21527f1718ea /libshiboken | |
parent | ed5af2558722705d38a33fc9b98cf93ccdfae9dd (diff) |
Fixed keep reference funcion.
The keepReference function does not increase the referece of all
objects if the argument is a list.
Fixes bug #854.
Reviewer: Hugo Parente <hugo.lima@openbossa.org>
Luciano Wolf <luciano.wolf@openbossa.org>
Diffstat (limited to 'libshiboken')
-rw-r--r-- | libshiboken/basewrapper.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/libshiboken/basewrapper.cpp b/libshiboken/basewrapper.cpp index 3ea0507ef..f1165d911 100644 --- a/libshiboken/basewrapper.cpp +++ b/libshiboken/basewrapper.cpp @@ -1089,7 +1089,7 @@ void keepReference(SbkObject* self, const char* key, PyObject* referredObject, b RefCountMap& refCountMap = *(self->d->referredObjects); if (!isNone) - incRefPyObject(referredObject); + Py_INCREF(referredObject); RefCountMap::iterator iter = refCountMap.find(key); if (!append && (iter != refCountMap.end())) { @@ -1098,11 +1098,13 @@ void keepReference(SbkObject* self, const char* key, PyObject* referredObject, b } if (!isNone) { - std::list<SbkObject*> values = splitPyObject(referredObject); - if (append && (iter != refCountMap.end())) - refCountMap[key].insert(refCountMap[key].end(), values.begin(), values.end()); - else - refCountMap[key] = values; + if (append && (iter != refCountMap.end())) { + refCountMap[key].push_back(reinterpret_cast<SbkObject*>(referredObject)); + } else { + std::list<SbkObject*> new_list; + new_list.push_back(reinterpret_cast<SbkObject*>(referredObject)); + refCountMap[key] = new_list;; + } } } |