sc/source/core/tool/formularesult.cxx |    7 +++++++
 sc/source/core/tool/interpr4.cxx      |    1 +
 2 files changed, 8 insertions(+)

New commits:
commit 42c235fe8a616afea4c838901f73c52a262b1337
Author:     Caolán McNamara <caolan.mcnam...@collabora.com>
AuthorDate: Thu Apr 18 09:23:39 2024 +0100
Commit:     Caolán McNamara <caolan.mcnam...@collabora.com>
CommitDate: Thu Apr 18 14:40:21 2024 +0200

    Related: tdf#160056 use simple ref count for temp double tokens
    
    Change-Id: I268a20fb4f87c62f2344f1b518a3a79ac3e8b55e
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/166232
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolan.mcnam...@collabora.com>

diff --git a/sc/source/core/tool/formularesult.cxx 
b/sc/source/core/tool/formularesult.cxx
index 08ef363ff68f..234c17780b4e 100644
--- a/sc/source/core/tool/formularesult.cxx
+++ b/sc/source/core/tool/formularesult.cxx
@@ -661,6 +661,13 @@ void ScFormulaResult::HandleStuffAfterParallelCalculation()
         mpToken->IncRef();
         mbNoneRefCnt = false;
     }
+    // If ScInterpreter::CreateFormulaDoubleToken tokens make it into a result
+    if (mbToken && mpToken)
+    {
+        // temp check to look for this
+        assert(mpToken->GetRefCntPolicy() == 
formula::RefCntPolicy::ThreadSafe);
+        
const_cast<formula::FormulaToken*>(mpToken)->SetRefCntPolicy(formula::RefCntPolicy::ThreadSafe);
+    }
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/core/tool/interpr4.cxx b/sc/source/core/tool/interpr4.cxx
index 27f2211b9f30..782d1a952b8c 100644
--- a/sc/source/core/tool/interpr4.cxx
+++ b/sc/source/core/tool/interpr4.cxx
@@ -1783,6 +1783,7 @@ formula::FormulaToken* 
ScInterpreter::CreateFormulaDoubleToken( double fVal, SvN
 
     // Allocate a new token
     auto p = new FormulaTypedDoubleToken( fVal, static_cast<sal_Int16>(nFmt) );
+    p->SetRefCntPolicy(RefCntPolicy::UnsafeRef);
     if ( mrContext.maTokens[mrContext.mnTokenCachePos] )
         mrContext.maTokens[mrContext.mnTokenCachePos]->DecRef();
     mrContext.maTokens[mrContext.mnTokenCachePos] = p;

Reply via email to