diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2016-01-06 16:13:52 +0100 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2016-01-06 16:21:44 +0100 |
commit | 43de9a5b0f68a77a10595b3f69c6145cd9be05b6 (patch) | |
tree | affc156056bdaf91d39eac99562e30407440fd7b /svl | |
parent | 3b70b846503e8c3942da95a23e5fe854b02e0553 (diff) |
What these SAL_INFO probably want to tell us...
...given the oldest incarnation of the code still available is
HACK( "fuer Image, dort gibt es derzeit keine Statics - Bug" )
if ( ppStaticDefaults )
and
HACK( "fuer Image, dort gibt es derzeit keine Statics - Bug" )
if ( ppStaticDefaults )
from cf7e1f9cc99e7c260cfab823f2c47f56035bdbd0 "INTEGRATION:
CWS visibility03: #i45006# Moved from svtools/source/items/ (for
svl/items1.lib)"...
...is that ppStaticDefaults should really be non-null, but "Image" (Draw?
Impress?) needed a temporary (?) hack there.
Test that assumption by asserting that ppStaticDefaults is non-null.
Change-Id: I2a75547618da1d211c44176e4593f6951a0e0298
Diffstat (limited to 'svl')
-rw-r--r-- | svl/source/items/itempool.cxx | 97 |
1 files changed, 46 insertions, 51 deletions
diff --git a/svl/source/items/itempool.cxx b/svl/source/items/itempool.cxx index d8a19b9a9355..f58dbad19985 100644 --- a/svl/source/items/itempool.cxx +++ b/svl/source/items/itempool.cxx @@ -29,6 +29,7 @@ #include "poolio.hxx" #include <algorithm> +#include <cassert> #include <vector> @@ -401,35 +402,32 @@ void SfxItemPool::SetSecondaryPool( SfxItemPool *pPool ) if ( pImp->mpSecondary ) { #ifdef DBG_UTIL - SAL_INFO( "svl.items", "for Image: there are not statics; this is a bug" ); - if ( pImp->ppStaticDefaults ) + // Delete() did not yet run? + if ( !pImp->maPoolItems.empty() && !pImp->mpSecondary->pImp->maPoolItems.empty() ) { - // Delete() did not yet run? - if ( !pImp->maPoolItems.empty() && !pImp->mpSecondary->pImp->maPoolItems.empty() ) - { // Does the Master have SetItems? - bool bHasSetItems = false; - for ( sal_uInt16 i = 0; !bHasSetItems && i < pImp->mnEnd - pImp->mnStart; ++i ) - bHasSetItems = dynamic_cast<const SfxSetItem *>(pImp->ppStaticDefaults[i]) != nullptr; - - // Detached Pools must be empty - bool bOK = bHasSetItems; - for ( sal_uInt16 n = 0; - bOK && n <= pImp->mpSecondary->pImp->mnEnd - pImp->mpSecondary->pImp->mnStart; - ++n ) + bool bHasSetItems = false; + assert(pImp->ppStaticDefaults); + for ( sal_uInt16 i = 0; !bHasSetItems && i < pImp->mnEnd - pImp->mnStart; ++i ) + bHasSetItems = dynamic_cast<const SfxSetItem *>(pImp->ppStaticDefaults[i]) != nullptr; + + // Detached Pools must be empty + bool bOK = bHasSetItems; + for ( sal_uInt16 n = 0; + bOK && n <= pImp->mpSecondary->pImp->mnEnd - pImp->mpSecondary->pImp->mnStart; + ++n ) + { + SfxPoolItemArray_Impl* pItemArr = pImp->mpSecondary->pImp->maPoolItems[n]; + if ( pItemArr ) { - SfxPoolItemArray_Impl* pItemArr = pImp->mpSecondary->pImp->maPoolItems[n]; - if ( pItemArr ) - { - SfxPoolItemArrayBase_Impl::iterator ppHtArr = pItemArr->begin(); - for( size_t i = pItemArr->size(); i; ++ppHtArr, --i ) - if ( !(*ppHtArr) ) - { - OSL_FAIL( "old secondary pool must be empty" ); - bOK = false; - break; - } - } + SfxPoolItemArrayBase_Impl::iterator ppHtArr = pItemArr->begin(); + for( size_t i = pItemArr->size(); i; ++ppHtArr, --i ) + if ( !(*ppHtArr) ) + { + OSL_FAIL( "old secondary pool must be empty" ); + bOK = false; + break; + } } } } @@ -519,38 +517,35 @@ void SfxItemPool::Delete() sal_uInt16 nArrCnt; // Collect the SetItems first - SAL_INFO( "svl.items", "for Image: there are not statics there yet; this is a bug" ); - if ( pImp->ppStaticDefaults ) + assert(pImp->ppStaticDefaults); + for ( nArrCnt = GetSize_Impl(); + nArrCnt; + --nArrCnt, ++itrItemArr, ++ppDefaultItem, ++ppStaticDefaultItem ) { - for ( nArrCnt = GetSize_Impl(); - nArrCnt; - --nArrCnt, ++itrItemArr, ++ppDefaultItem, ++ppStaticDefaultItem ) + // *ppStaticDefaultItem could've already been deleted in a class derived + // from SfxItemPool + // This causes chaos in Itempool! + if ( *ppStaticDefaultItem && dynamic_cast< const SfxSetItem* >(*ppStaticDefaultItem) != nullptr ) { - // *ppStaticDefaultItem could've already been deleted in a class derived - // from SfxItemPool - // This causes chaos in Itempool! - if ( *ppStaticDefaultItem && dynamic_cast< const SfxSetItem* >(*ppStaticDefaultItem) != nullptr ) + if ( *itrItemArr ) { - if ( *itrItemArr ) - { - SfxPoolItemArrayBase_Impl::iterator ppHtArr = (*itrItemArr)->begin(); - for ( size_t n = (*itrItemArr)->size(); n; --n, ++ppHtArr ) - if (*ppHtArr) - { + SfxPoolItemArrayBase_Impl::iterator ppHtArr = (*itrItemArr)->begin(); + for ( size_t n = (*itrItemArr)->size(); n; --n, ++ppHtArr ) + if (*ppHtArr) + { #ifdef DBG_UTIL - ReleaseRef( **ppHtArr, (*ppHtArr)->GetRefCount() ); + ReleaseRef( **ppHtArr, (*ppHtArr)->GetRefCount() ); #endif - delete *ppHtArr; - } - DELETEZ( *itrItemArr ); - } - if ( *ppDefaultItem ) - { + delete *ppHtArr; + } + DELETEZ( *itrItemArr ); + } + if ( *ppDefaultItem ) + { #ifdef DBG_UTIL - SetRefCount( **ppDefaultItem, 0 ); + SetRefCount( **ppDefaultItem, 0 ); #endif - DELETEZ( *ppDefaultItem ); - } + DELETEZ( *ppDefaultItem ); } } } |