Kaydet (Commit) 723e74b5 authored tarafından Caolán McNamara's avatar Caolán McNamara

use rtl::Static where double-locked pattern used

üst 3dfc2de7
...@@ -154,7 +154,7 @@ namespace comphelper ...@@ -154,7 +154,7 @@ namespace comphelper
private: private:
COMPHELPER_DLLPRIVATE static const ::com::sun::star::uno::Sequence< sal_Int8 >& getUnoTunnelImplementationId(); COMPHELPER_DLLPRIVATE static const ::com::sun::star::uno::Sequence< sal_Int8 > getUnoTunnelImplementationId();
}; };
//......................................................................... //.........................................................................
......
...@@ -121,21 +121,13 @@ namespace comphelper ...@@ -121,21 +121,13 @@ namespace comphelper
return ( NULL != pImplementation ); return ( NULL != pImplementation );
} }
namespace { struct lcl_ImplId : public rtl::Static< ::cppu::OImplementationId, lcl_ImplId > {}; }
//--------------------------------------------------------------------- //---------------------------------------------------------------------
const Sequence< sal_Int8 >& OAccessibleImplementationAccess::getUnoTunnelImplementationId() const Sequence< sal_Int8 > OAccessibleImplementationAccess::getUnoTunnelImplementationId()
{ {
static Sequence< sal_Int8 > aId; ::cppu::OImplementationId &rID = lcl_ImplId::get();
if ( !aId.getLength() ) return rID.getImplementationId();
{
::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );
if ( !aId.getLength() )
{
static ::cppu::OImplementationId aImplId;
// unfortunately, the OImplementationId::getImplementationId returns a copy, not a static reference ...
aId = aImplId.getImplementationId();
}
}
return aId;
} }
//--------------------------------------------------------------------- //---------------------------------------------------------------------
......
...@@ -30,6 +30,8 @@ ...@@ -30,6 +30,8 @@
#include "comphelper_module.hxx" #include "comphelper_module.hxx"
#include <rtl/instance.hxx>
//-------------------------------------------------------------------- //--------------------------------------------------------------------
extern void createRegistryInfo_OPropertyBag(); extern void createRegistryInfo_OPropertyBag();
extern void createRegistryInfo_SequenceOutputStream(); extern void createRegistryInfo_SequenceOutputStream();
...@@ -49,13 +51,12 @@ namespace comphelper { namespace module ...@@ -49,13 +51,12 @@ namespace comphelper { namespace module
{ {
//........................................................................ //........................................................................
static void initializeModule() namespace
{ {
static bool bInitialized( false ); class doInitialize
if ( !bInitialized )
{ {
::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); public:
if ( !bInitialized ) doInitialize()
{ {
createRegistryInfo_OPropertyBag(); createRegistryInfo_OPropertyBag();
createRegistryInfo_SequenceOutputStream(); createRegistryInfo_SequenceOutputStream();
...@@ -70,7 +71,14 @@ namespace comphelper { namespace module ...@@ -70,7 +71,14 @@ namespace comphelper { namespace module
createRegistryInfo_OSimpleLogRing(); createRegistryInfo_OSimpleLogRing();
createRegistryInfo_OOfficeRestartManager(); createRegistryInfo_OOfficeRestartManager();
} }
} };
struct theInitializer : public rtl::Static< doInitialize, theInitializer > {};
}
static void initializeModule()
{
theInitializer::get();
} }
//........................................................................ //........................................................................
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include <com/sun/star/uno/genfunc.h> #include <com/sun/star/uno/genfunc.h>
#include <cppuhelper/queryinterface.hxx> #include <cppuhelper/queryinterface.hxx>
#include <comphelper/sequence.hxx> #include <comphelper/sequence.hxx>
#include <rtl/instance.hxx>
//......................................................................... //.........................................................................
namespace comphelper namespace comphelper
...@@ -217,20 +218,13 @@ namespace comphelper ...@@ -217,20 +218,13 @@ namespace comphelper
); );
} }
namespace { struct lcl_ImplId : public rtl::Static< ::cppu::OImplementationId, lcl_ImplId > {}; }
//--------------------------------------------------------------------- //---------------------------------------------------------------------
Sequence< sal_Int8 > SAL_CALL OStatefulPropertySet::getImplementationId() throw(RuntimeException) Sequence< sal_Int8 > SAL_CALL OStatefulPropertySet::getImplementationId() throw(RuntimeException)
{ {
static ::cppu::OImplementationId * pId = NULL; ::cppu::OImplementationId &rID = lcl_ImplId::get();
if ( !pId ) return rID.getImplementationId();
{
::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );
if ( !pId )
{
static ::cppu::OImplementationId aId;
pId = &aId;
}
}
return pId->getImplementationId();
} }
//--------------------------------------------------------------------- //---------------------------------------------------------------------
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment