aboutsummaryrefslogtreecommitdiffstats
path: root/libshiboken
diff options
context:
space:
mode:
authorMarcelo Lira <marcelo.lira@openbossa.org>2010-07-27 14:24:46 -0300
committerMarcelo Lira <marcelo.lira@openbossa.org>2010-07-27 17:23:47 -0300
commit21460348ae4a73877ecbcc610d5ccd66a390d0c1 (patch)
tree30eca97f07cf325d8397958ff760b02244c660d3 /libshiboken
parent7bd306347b8d55343e783a340f8bdc723111944f (diff)
BindingManager destructor now asserts if the wrapper map is empty.
The assertion is only used in debug mode. The duck punching test was altered to avoid failing when run with debug. Check the duck punching test file for a better explanation. Also added a debug helper method "showWrapperMap" to the binding manager, it shows the contents of the C pointer to Python wrapper mapping. Reviewed by Luciano Wolf <luciano.wolf@openbossa.org> Reviewed by Renato Araújo <renato.filho@openbossa.org>
Diffstat (limited to 'libshiboken')
-rw-r--r--libshiboken/bindingmanager.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/libshiboken/bindingmanager.cpp b/libshiboken/bindingmanager.cpp
index 26e146031..e8c549542 100644
--- a/libshiboken/bindingmanager.cpp
+++ b/libshiboken/bindingmanager.cpp
@@ -43,6 +43,16 @@ namespace Shiboken
typedef google::dense_hash_map<const void*, PyObject*> WrapperMap;
+static void showWrapperMap(const WrapperMap& wrapperMap)
+{
+ printf("-------------------------------\n");
+ printf("WrapperMap: %p (size: %d)\n", &wrapperMap, (int) wrapperMap.size());
+ WrapperMap::const_iterator iter;
+ for (iter = wrapperMap.begin(); iter != wrapperMap.end(); ++iter)
+ printf("key: %p, value: %p (%s)\n", iter->first, iter->second, iter->second->ob_type->tp_name);
+ printf("-------------------------------\n");
+}
+
struct BindingManager::BindingManagerPrivate {
WrapperMap wrapperMapper;
void releaseWrapper(void* cptr);
@@ -75,6 +85,7 @@ BindingManager::BindingManager()
BindingManager::~BindingManager()
{
+ assert(m_d->wrapperMapper.size() == 0);
delete m_d;
}