tdf#122607 sw: remove deleted SwTextFrame's cache entry

Apparently nothing else would remove the entry, and without SwTextFrame
it's not accessible any more.

If the entry was recently used, then the SwSaveSetLRUOfst usage in
SwViewShell::CalcLayout() will preserve it instead of giving the cache
entry to a new frame.

Change-Id: Id43fdbad2ac006853928e30a7b6768c3e3dc1667
Reviewed-on: https://gerrit.libreoffice.org/71541
Tested-by: Jenkins
Reviewed-by: Michael Stahl <Michael.Stahl@cib.de>
diff --git a/sw/source/core/bastyp/swcache.cxx b/sw/source/core/bastyp/swcache.cxx
index 705c49a..ff6d568 100644
--- a/sw/source/core/bastyp/swcache.cxx
+++ b/sw/source/core/bastyp/swcache.cxx
@@ -323,6 +323,15 @@ void SwCache::DeleteObj( SwCacheObj *pObj )
    CHECK;
}

void SwCache::Delete(void const*const pOwner, sal_uInt16 const nIndex)
{
    INCREMENT( m_nDelete );
    if (SwCacheObj *const pObj = Get(pOwner, nIndex, false))
    {
        DeleteObj(pObj);
    }
}

void SwCache::Delete( const void *pOwner )
{
    INCREMENT( m_nDelete );
diff --git a/sw/source/core/inc/swcache.hxx b/sw/source/core/inc/swcache.hxx
index aa0e418..9a6563e 100644
--- a/sw/source/core/inc/swcache.hxx
+++ b/sw/source/core/inc/swcache.hxx
@@ -102,6 +102,7 @@ public:
    void ToTop( SwCacheObj *pObj );

    bool Insert( SwCacheObj *pNew );
    void Delete(const void * pOwner, sal_uInt16 nIndex);
    void Delete( const void *pOwner );

    void SetLRUOfst( const sal_uInt16 nOfst );  /// nOfst determines how many are not to be touched
diff --git a/sw/source/core/text/txtfrm.cxx b/sw/source/core/text/txtfrm.cxx
index 90541798..37c1c40 100644
--- a/sw/source/core/text/txtfrm.cxx
+++ b/sw/source/core/text/txtfrm.cxx
@@ -881,6 +881,10 @@ void SwTextFrame::DestroyImpl()

SwTextFrame::~SwTextFrame()
{
    if (GetCacheIdx() != USHRT_MAX)
    {
        s_pTextCache->Delete(this, GetCacheIdx());
    }
}

namespace sw {