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;