Split localProcessFactory function into class with setter and getter

...which avoids a false positive from an upcoming loplugin that finds suspicious
uses of variables during their own initialization (as happened with xReturn in
getProcessServiceFactory).

Change-Id: I40e90e2e74cde84a3425b014d87584f4a56c0e22
Reviewed-on: https://gerrit.libreoffice.org/70877
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
This commit is contained in:
Stephan Bergmann
2019-04-17 14:29:18 +02:00
parent d7f4f5650d
commit 884ad0d1af

View File

@@ -33,32 +33,44 @@ using namespace osl;
namespace comphelper
{
/*
This function preserves only that the xProcessFactory variable will not be create when
the library is loaded.
*/
static Reference< XMultiServiceFactory > localProcessFactory( const Reference< XMultiServiceFactory >& xSMgr, bool bSet )
{
Guard< Mutex > aGuard( Mutex::getGlobalMutex() );
namespace {
static Reference< XMultiServiceFactory > xProcessFactory;
if ( bSet )
class LocalProcessFactory {
public:
void set( const Reference< XMultiServiceFactory >& xSMgr )
{
Guard< Mutex > aGuard( Mutex::getGlobalMutex() );
xProcessFactory = xSMgr;
}
return xProcessFactory;
}
Reference< XMultiServiceFactory > get()
{
Guard< Mutex > aGuard( Mutex::getGlobalMutex() );
return xProcessFactory;
}
private:
Reference< XMultiServiceFactory > xProcessFactory;
};
/*
This var preserves only that the above xProcessFactory variable will not be create when
the library is loaded.
*/
LocalProcessFactory localProcessFactory;
}
void setProcessServiceFactory(const Reference< XMultiServiceFactory >& xSMgr)
{
localProcessFactory( xSMgr, true );
localProcessFactory.set( xSMgr );
}
Reference< XMultiServiceFactory > getProcessServiceFactory()
{
Reference< XMultiServiceFactory> xReturn = localProcessFactory( xReturn, false );
Reference< XMultiServiceFactory> xReturn = localProcessFactory.get();
if ( !xReturn.is() )
{
throw DeploymentException( "null process service factory" );