tdf#89329: use shared_ptr for pImpl in syslocale

Change-Id: I646495e3538cb438a06765fe8cde252bad667bea
Reviewed-on: https://gerrit.libreoffice.org/25969
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Noel Grandin <noelgrandin@gmail.com>
This commit is contained in:
Xisco Fauli 2016-06-06 13:23:35 +02:00 committed by Noel Grandin
parent 60e57960f2
commit 3db4830c41
2 changed files with 8 additions and 11 deletions

View File

@ -45,8 +45,7 @@ class UNOTOOLS_DLLPUBLIC SvtSysLocale
{
friend class SvtSysLocale_Impl; // access to mutex
static SvtSysLocale_Impl* pImpl;
static sal_Int32 nRefCount;
std::shared_ptr<SvtSysLocale_Impl> pImpl;
UNOTOOLS_DLLPRIVATE static ::osl::Mutex& GetMutex();

View File

@ -34,8 +34,7 @@
using namespace osl;
using namespace com::sun::star;
SvtSysLocale_Impl* SvtSysLocale::pImpl = nullptr;
sal_Int32 SvtSysLocale::nRefCount = 0;
std::weak_ptr<SvtSysLocale_Impl> pSysLocale;
class SvtSysLocale_Impl : public utl::ConfigurationListener
{
@ -114,19 +113,18 @@ void SvtSysLocale_Impl::setDateAcceptancePatternsConfig()
SvtSysLocale::SvtSysLocale()
{
MutexGuard aGuard( GetMutex() );
pImpl = pSysLocale.lock();
if ( !pImpl )
pImpl = new SvtSysLocale_Impl;
++nRefCount;
{
pImpl = std::make_shared<SvtSysLocale_Impl>();
pSysLocale = pImpl;
}
}
SvtSysLocale::~SvtSysLocale()
{
MutexGuard aGuard( GetMutex() );
if ( !--nRefCount )
{
delete pImpl;
pImpl = nullptr;
}
pImpl.reset();
}
// static