include/vcl/lazydelete.hxx | 11 ++++++----- vcl/README.lifecycle | 2 ++ 2 files changed, 8 insertions(+), 5 deletions(-)
New commits: commit a408491c709c5caf86e559f3caef0d7c6819f561 Author: Michael Meeks <[email protected]> Date: Tue Mar 24 17:43:20 2015 +0000 unwind LazyDelete issues - deleting VclPtr types. Change-Id: Iffdc9f73520a97ccc284ecba1b2468dc229506c1 diff --git a/include/vcl/lazydelete.hxx b/include/vcl/lazydelete.hxx index 5196117..92c3253 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 <vector> #include <boost/unordered_map.hpp> @@ -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 0edd0c8..26e7a34 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. _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
