summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Meeks <michael.meeks@collabora.com>2015-03-24 17:43:20 +0000
committerMichael Meeks <michael.meeks@collabora.com>2015-04-10 13:07:31 +0100
commitbaf676996b8187e5300672b8e381ab7f86ce6fd0 (patch)
tree0617fa76f84e12ec832de6a63be978ecf67ad734
parentcorrect debugging assertions. (diff)
downloadcore-baf676996b8187e5300672b8e381ab7f86ce6fd0.tar.gz
core-baf676996b8187e5300672b8e381ab7f86ce6fd0.zip
unwind LazyDelete issues - deleting VclPtr types.
Change-Id: Iffdc9f73520a97ccc284ecba1b2468dc229506c1
-rw-r--r--include/vcl/lazydelete.hxx11
-rw-r--r--vcl/README.lifecycle2
2 files changed, 8 insertions, 5 deletions
diff --git a/include/vcl/lazydelete.hxx b/include/vcl/lazydelete.hxx
index 531d64051e8b..811829fba144 100644
--- a/include/vcl/lazydelete.hxx
+++ b/include/vcl/lazydelete.hxx
@@ -21,6 +21,7 @@
#define INCLUDED_VCL_LAZYDELETE_HXX
#include <vcl/dllapi.h>
+#include <vcl/vclptr.hxx>
#include <unordered_map>
#include <vector>
@@ -101,8 +102,8 @@ namespace vcl
struct DeleteObjectEntry
{
- T* m_pObject;
- bool m_bDeleted;
+ VclPtr<T> m_pObject;
+ bool m_bDeleted;
DeleteObjectEntry() :
m_pObject( NULL ),
@@ -136,7 +137,7 @@ namespace vcl
// do the actual work
unsigned int nCount = m_aObjects.size();
- std::vector<T*> aRealDelete;
+ std::vector< VclPtr < T > > aRealDelete;
aRealDelete.reserve( nCount );
for( unsigned int i = 0; i < nCount; i++ )
{
@@ -158,8 +159,8 @@ namespace vcl
#endif
// check if the object to be deleted is not already destroyed
// as a side effect of a previous lazily destroyed object
- if( ! m_aObjects[ m_aPtrToIndex[ reinterpret_cast<sal_IntPtr>(aRealDelete[n]) ] ].m_bDeleted )
- delete aRealDelete[n];
+ if( ! m_aObjects[ m_aPtrToIndex[ reinterpret_cast<sal_IntPtr>(aRealDelete[n].get()) ] ].m_bDeleted )
+ aRealDelete[n].disposeAndClear();
}
}
diff --git a/vcl/README.lifecycle b/vcl/README.lifecycle
index 0edd0c8b19eb..26e7a348cc39 100644
--- a/vcl/README.lifecycle
+++ b/vcl/README.lifecycle
@@ -137,6 +137,8 @@ or:
---------- What remains to be done ? ----------
+ * Cleanup DogTags and LazyDelete.
+
* Expand the VclPtr pattern to many other less
than safe VCL types.