diff options
Diffstat (limited to 'bridges/source/cpp_uno/cc50_solaris_intel/except.cxx')
-rw-r--r-- | bridges/source/cpp_uno/cc50_solaris_intel/except.cxx | 21 |
1 files changed, 4 insertions, 17 deletions
diff --git a/bridges/source/cpp_uno/cc50_solaris_intel/except.cxx b/bridges/source/cpp_uno/cc50_solaris_intel/except.cxx index 6a9b923a4e26..061c3742df03 100644 --- a/bridges/source/cpp_uno/cc50_solaris_intel/except.cxx +++ b/bridges/source/cpp_uno/cc50_solaris_intel/except.cxx @@ -36,6 +36,7 @@ #include <list> #include <map> #include <rtl/alloc.h> +#include <rtl/instance.hxx> #include <osl/diagnose.h> #include <rtl/strbuf.hxx> @@ -313,6 +314,8 @@ void* RTTIHolder::generateRTTI( typelib_CompoundTypeDescription * pCompTypeDescr return pRTTI; } +struct RTTISingleton: public rtl::Static< RTTIHolder, RTTISingleton > {}; + //__________________________________________________________________________________________________ static void deleteException( @@ -345,23 +348,7 @@ void cc50_solaris_intel_raiseException( uno_Any * pUnoExc, uno_Mapping * pUno2Cp // will be released by deleteException typelib_typedescriptionreference_getDescription( &pTypeDescr, pUnoExc->pType ); - void* pRTTI; - { - static ::osl::Mutex aMutex; - ::osl::Guard< ::osl::Mutex > guard( aMutex ); - - static RTTIHolder * s_pRTTI = 0; - if (! s_pRTTI) - { -#ifdef LEAK_STATIC_DATA - s_pRTTI = new RTTIHolder(); -#else - static RTTIHolder s_aRTTI; - s_pRTTI = &s_aRTTI; -#endif - } - - pRTTI = s_pRTTI->generateRTTI( (typelib_CompoundTypeDescription *)pTypeDescr ); + pRTTI = RTTISingleton::get().generateRTTI( (typelib_CompoundTypeDescription *)pTypeDescr ); } // a must be |