diff options
Diffstat (limited to 'sc/source/core/tool/compiler.cxx')
-rw-r--r-- | sc/source/core/tool/compiler.cxx | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx index e68cf55d6ae3..55b10c3f4568 100644 --- a/sc/source/core/tool/compiler.cxx +++ b/sc/source/core/tool/compiler.cxx @@ -2757,7 +2757,8 @@ bool ScCompiler::IsMacro( const OUString& rName ) // formulas are compiled from a threaded import may result in a deadlock. // Check first if we actually could acquire it and if not bail out. /* FIXME: yes, but how ... */ - if (!Application::GetSolarMutex().tryToAcquire()) + comphelper::SolarMutex& rSolarMutex = Application::GetSolarMutex(); + if (!rSolarMutex.tryToAcquire()) { SAL_WARN( "sc.core", "ScCompiler::IsMacro - SolarMutex would deadlock, not obtaining Basic"); return false; // bad luck @@ -2784,6 +2785,7 @@ bool ScCompiler::IsMacro( const OUString& rName ) SbxMethod* pMeth = (SbxMethod*) pObj->Find( aName, SbxCLASS_METHOD ); if( !pMeth ) { + rSolarMutex.release(); return false; } // It really should be a BASIC function! @@ -2791,12 +2793,14 @@ bool ScCompiler::IsMacro( const OUString& rName ) || ( pMeth->IsFixed() && pMeth->GetType() == SbxEMPTY ) || !pMeth->ISA(SbMethod) ) { + rSolarMutex.release(); return false; } ScRawToken aToken; aToken.SetExternal( aName.getStr() ); aToken.eOp = ocMacro; pRawToken = aToken.Clone(); + rSolarMutex.release(); return true; #endif } |