[Libreoffice-commits] core.git: Branch 'libreoffice-4-2' - sc/source

Eike Rathke erack at redhat.com
Mon Dec 2 07:17:13 PST 2013


 sc/source/core/tool/compiler.cxx |    6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

New commits:
commit 0a34d4a5af3658be10ea9091096027a159cc7316
Author: Eike Rathke <erack at redhat.com>
Date:   Mon Dec 2 16:05:02 2013 +0100

    release SolarMutex after successful tryToAcquire()
    
    tryToAcquire() locks if successful, so unlock when leaving
    
    Change-Id: Ic0bd4b10ccb8419dd40946dbaf393a27e413bf2d
    (cherry picked from commit e56105a1f24e9eac491c32c841030c69fb2e2d30)

diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx
index e68cf55..55b10c3 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
 }


More information about the Libreoffice-commits mailing list