diff options
author | Armin Le Grand <alg@apache.org> | 2012-06-26 12:36:31 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2013-04-10 20:17:30 +0100 |
commit | 858c6610f3476bb47bb7b4e621a7ac48a9e34a75 (patch) | |
tree | 8eb898f314aa3c3099b6b2359a2bf8c52e1651dd /svl | |
parent | a6f169433ada74a81b2e3421ea9c68a36c821fbb (diff) |
Resolves: #i120077# Memory leak fixed in ScXMLFontAutoStylePool_Impl
also checked and fixed memory leaks caused by not deleting
SfxStyleSheetIterator instances.
Found by: Chao Huang
Patch by: Chao Huang
Review by: alg
(cherry picked from commit aee8221b3fbe64d8e88aa3a1b630214807cd86f0)
Conflicts:
sc/source/core/data/stlsheet.cxx
sc/source/filter/xml/xmlfonte.cxx
sfx2/source/doc/objcont.cxx
svl/source/items/style.cxx
sw/source/core/unocore/unostyle.cxx
Resolves: #120077# ALG: Reverted r1354011,
adapted all usages of SfxStyleSheetIterator and CreateIterator to use
boost::shared_ptr
(cherry picked from commit ec1819f218b94bed1556653e1b2b816a65da61ef)
Conflicts:
sc/source/core/data/stlsheet.cxx
sc/source/filter/xml/xmlfonte.cxx
sfx2/source/doc/objcont.cxx
svl/inc/svl/style.hxx
svl/source/items/style.cxx
sw/source/core/unocore/unoframe.cxx
sw/source/core/unocore/unostyle.cxx
26937d4d65562b14de0aea59a7b01cc4334f73c1
Change-Id: If99bf3ee399292ec269d68b36ee78ed63f033215
Diffstat (limited to 'svl')
-rw-r--r-- | svl/inc/svl/style.hxx | 5 | ||||
-rw-r--r-- | svl/source/items/style.cxx | 20 |
2 files changed, 11 insertions, 14 deletions
diff --git a/svl/inc/svl/style.hxx b/svl/inc/svl/style.hxx index 664ca5cb1ec2..af58cbc44327 100644 --- a/svl/inc/svl/style.hxx +++ b/svl/inc/svl/style.hxx @@ -37,10 +37,10 @@ #include <svl/stylesheetuser.hxx> #include <svl/style.hrc> +#include <boost/shared_ptr.hpp> class SfxItemSet; class SfxItemPool; - class SfxStyleSheetBasePool; class SvStream; @@ -192,6 +192,7 @@ private: friend class SfxStyleSheetBasePool; }; +typedef ::boost::shared_ptr< SfxStyleSheetIterator > SfxStyleSheetIteratorPtr; //========================================================================= class SfxStyleSheetBasePool_Impl; @@ -228,7 +229,7 @@ public: SfxItemPool& GetPool(); const SfxItemPool& GetPool() const; - virtual SfxStyleSheetIterator* CreateIterator(SfxStyleFamily, sal_uInt16 nMask); + virtual SfxStyleSheetIteratorPtr CreateIterator(SfxStyleFamily, sal_uInt16 nMask); virtual sal_uInt16 Count(); virtual SfxStyleSheetBase* operator[](sal_uInt16 nIdx); diff --git a/svl/source/items/style.cxx b/svl/source/items/style.cxx index cd44bea2bbb7..c2879e799f1a 100644 --- a/svl/source/items/style.cxx +++ b/svl/source/items/style.cxx @@ -83,10 +83,8 @@ SfxStyleSheetHint::SfxStyleSheetHint class SfxStyleSheetBasePool_Impl { - public: - SfxStyleSheetIterator *pIter; - SfxStyleSheetBasePool_Impl() : pIter(0){} - ~SfxStyleSheetBasePool_Impl(){delete pIter;} +public: + SfxStyleSheetIteratorPtr pIter; }; @@ -532,13 +530,12 @@ void SfxStyleSheetBasePool::Replace( SfxStyleSheetIterator& SfxStyleSheetBasePool::GetIterator_Impl() { - SfxStyleSheetIterator*& rpIter = pImp->pIter; - if( !rpIter || (rpIter->GetSearchMask() != nMask) || (rpIter->GetSearchFamily() != nSearchFamily) ) + if( !pImp->pIter || (pImp->pIter->GetSearchMask() != nMask) || (pImp->pIter->GetSearchFamily() != nSearchFamily) ) { - delete rpIter; - rpIter = CreateIterator( nSearchFamily, nMask ); + pImp->pIter = CreateIterator( nSearchFamily, nMask ); } - return *rpIter; + + return *pImp->pIter; } SfxStyleSheetBasePool::SfxStyleSheetBasePool( SfxItemPool& r ) @@ -603,14 +600,13 @@ sal_uInt16 SfxStyleSheetBasePool::GetSearchMask() const return nMask; } - -SfxStyleSheetIterator* SfxStyleSheetBasePool::CreateIterator +SfxStyleSheetIteratorPtr SfxStyleSheetBasePool::CreateIterator ( SfxStyleFamily eFam, sal_uInt16 mask ) { - return new SfxStyleSheetIterator(this,eFam,mask); + return SfxStyleSheetIteratorPtr(new SfxStyleSheetIterator(this,eFam,mask)); } SfxStyleSheetBase* SfxStyleSheetBasePool::Create |