release SolarMutex after successful tryToAcquire()

tryToAcquire() locks if successful, so unlock when leaving

Change-Id: Ic0bd4b10ccb8419dd40946dbaf393a27e413bf2d
This commit is contained in:
Eike Rathke
2013-12-02 16:05:02 +01:00
parent bfcf3608e2
commit e56105a1f2

View File

@@ -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
}