[Libreoffice-commits] core.git: Branch 'feature/vclref' - include/vcl vcl/README.lifecycle

Michael Meeks michael.meeks at collabora.com
Tue Mar 24 10:38:45 PDT 2015


 include/vcl/lazydelete.hxx |   11 ++++++-----
 vcl/README.lifecycle       |    2 ++
 2 files changed, 8 insertions(+), 5 deletions(-)

New commits:
commit a408491c709c5caf86e559f3caef0d7c6819f561
Author: Michael Meeks <michael.meeks at collabora.com>
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.
 


More information about the Libreoffice-commits mailing list