diff options
author | Michael Meeks <michael.meeks@collabora.com> | 2015-03-24 17:43:20 +0000 |
---|---|---|
committer | Michael Meeks <michael.meeks@collabora.com> | 2015-04-10 13:07:31 +0100 |
commit | baf676996b8187e5300672b8e381ab7f86ce6fd0 (patch) | |
tree | 0617fa76f84e12ec832de6a63be978ecf67ad734 | |
parent | 554be83e0f30d7c47f84195b1677ee1304fe2a34 (diff) |
unwind LazyDelete issues - deleting VclPtr types.
Change-Id: Iffdc9f73520a97ccc284ecba1b2468dc229506c1
-rw-r--r-- | include/vcl/lazydelete.hxx | 11 | ||||
-rw-r--r-- | vcl/README.lifecycle | 2 |
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. |