diff --git a/sfx2/source/control/itemdel.cxx b/sfx2/source/control/itemdel.cxx index 23f900902af9..096ab3752864 100644 --- a/sfx2/source/control/itemdel.cxx +++ b/sfx2/source/control/itemdel.cxx @@ -59,6 +59,10 @@ void SfxItemDisruptor_Impl::LaunchDeleteOnIdle() SfxItemDisruptor_Impl::~SfxItemDisruptor_Impl() { m_Idle.Stop(); + + // reset RefCount (was set to SFX_ITEMS_SPECIAL before!) + pItem->SetRefCount( 0 ); + delete pItem; } diff --git a/svl/source/items/itempool.cxx b/svl/source/items/itempool.cxx index fbf1281169b7..a2fd333b0470 100644 --- a/svl/source/items/itempool.cxx +++ b/svl/source/items/itempool.cxx @@ -334,12 +334,9 @@ void SfxItemPool::ReleaseDefaults for ( sal_uInt16 n = 0; n < nCount; ++n ) { assert(IsStaticDefaultItem(pDefaults[n])); - + pDefaults[n]->SetRefCount(0); if ( bDelete ) { delete pDefaults[n] ; pDefaults[n]= nullptr; } - else - pDefaults[n]->SetRefCount(0); - } if ( bDelete ) @@ -520,6 +517,9 @@ void SfxItemPool::Delete() auto& rItemPtr = pImpl->maPoolDefaults[n]; if (rItemPtr) { +#ifdef DBG_UTIL + SetRefCount(*rItemPtr, 0); +#endif delete rItemPtr; rItemPtr = nullptr; } @@ -549,6 +549,9 @@ void SfxItemPool::Delete() { if (rItemPtr) { +#ifdef DBG_UTIL + SetRefCount(*rItemPtr, 0); +#endif delete rItemPtr; rItemPtr = nullptr; } @@ -568,6 +571,7 @@ void SfxItemPool::SetPoolDefaultItem(const SfxPoolItem &rItem) pNewDefault->SetKind(SfxItemKind::PoolDefault); if (rOldDefault) { + rOldDefault->SetRefCount(0); DELETEZ(rOldDefault); } rOldDefault = pNewDefault; @@ -592,6 +596,7 @@ void SfxItemPool::ResetPoolDefaultItem( sal_uInt16 nWhichId ) pImpl->maPoolDefaults[GetIndex_Impl(nWhichId)]; if (rOldDefault) { + rOldDefault->SetRefCount(0); DELETEZ(rOldDefault); } } diff --git a/svl/source/items/poolio.cxx b/svl/source/items/poolio.cxx index 30056e376b5f..42a68764caed 100644 --- a/svl/source/items/poolio.cxx +++ b/svl/source/items/poolio.cxx @@ -470,6 +470,7 @@ void SfxItemPool_Impl::readTheItems ( { // Reuse SfxItemPool::AddRef( *pOldItem, rpNewItem->GetRefCount() ); + SfxItemPool::SetRefCount( *rpNewItem, 0 ); delete rpNewItem; rpNewItem = pOldItem; bFound = true;