diff options
author | Hugo Lima <hugo.lima@openbossa.org> | 2010-03-29 17:22:40 -0300 |
---|---|---|
committer | Hugo Lima <hugo.lima@openbossa.org> | 2010-03-30 17:41:39 -0300 |
commit | d3b8a53760ba7c768aaeb547ea541f0806e6e999 (patch) | |
tree | 98d486465605cc878a51248b7f69a9e1cca810f7 /libshiboken/basewrapper.cpp | |
parent | b0f8a5c519297bff918c864e76a3bc66e51980c9 (diff) |
Use a non-template function for Python object deallocation.
Diffstat (limited to 'libshiboken/basewrapper.cpp')
-rw-r--r-- | libshiboken/basewrapper.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/libshiboken/basewrapper.cpp b/libshiboken/basewrapper.cpp index 0d55ede18..eb3f24d06 100644 --- a/libshiboken/basewrapper.cpp +++ b/libshiboken/basewrapper.cpp @@ -222,6 +222,28 @@ bool importModule(const char* moduleName, PyTypeObject*** cppApiPtr) // Wrapper metatype and base type ---------------------------------------------------------- +void deallocWrapper(PyObject* pyObj) +{ + SbkBaseWrapper* sbkObj = reinterpret_cast<SbkBaseWrapper*>(pyObj); + if (sbkObj->weakreflist) + PyObject_ClearWeakRefs(pyObj); + + BindingManager::instance().releaseWrapper(pyObj); + if (SbkBaseWrapper_hasOwnership(pyObj)) { + SbkBaseWrapperType* sbkType = reinterpret_cast<SbkBaseWrapperType*>(pyObj->ob_type); + assert(!sbkType->is_python_type); + sbkType->cpp_dtor(sbkObj->cptr); + } + + if (SbkBaseWrapper_hasParentInfo(pyObj)) + destroyParentInfo(sbkObj); + SbkBaseWrapper_clearReferences(sbkObj); + + delete sbkObj->cptr; + sbkObj->cptr = 0; + Py_TYPE(pyObj)->tp_free(pyObj); +} + static PyObject* SbkBaseWrapperType_TpNew(PyTypeObject* metatype, PyObject* args, PyObject* kwds) { |