Kaydet (Commit) 7a60b2f3 authored tarafından Xisco Fauli's avatar Xisco Fauli Kaydeden (comit) Noel Grandin

tdf#89329: use shared_ptr for pImpl in defaultoptions...

instead of unique_ptr as in commit
7bc1c79c

Change-Id: I4e57378a333455b818162c6cc8484be9dcaddb03
Reviewed-on: https://gerrit.libreoffice.org/26236Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarNoel Grandin <noelgrandin@gmail.com>
üst e8c8d824
...@@ -30,7 +30,7 @@ class SvtDefaultOptions_Impl; ...@@ -30,7 +30,7 @@ class SvtDefaultOptions_Impl;
class SAL_WARN_UNUSED UNOTOOLS_DLLPUBLIC SvtDefaultOptions : public utl::detail::Options class SAL_WARN_UNUSED UNOTOOLS_DLLPUBLIC SvtDefaultOptions : public utl::detail::Options
{ {
private: private:
std::unique_ptr<SvtDefaultOptions_Impl> pImpl; std::shared_ptr<SvtDefaultOptions_Impl> pImpl;
public: public:
......
...@@ -93,6 +93,7 @@ public: ...@@ -93,6 +93,7 @@ public:
OUString m_aUserDictionaryPath; OUString m_aUserDictionaryPath;
SvtDefaultOptions_Impl(); SvtDefaultOptions_Impl();
~SvtDefaultOptions_Impl();
OUString GetDefaultPath( sal_uInt16 nId ) const; OUString GetDefaultPath( sal_uInt16 nId ) const;
virtual void Notify( const css::uno::Sequence<OUString>& aPropertyNames) override; virtual void Notify( const css::uno::Sequence<OUString>& aPropertyNames) override;
...@@ -103,8 +104,7 @@ private: ...@@ -103,8 +104,7 @@ private:
// global ---------------------------------------------------------------- // global ----------------------------------------------------------------
static SvtDefaultOptions_Impl* pOptions = nullptr; std::weak_ptr<SvtDefaultOptions_Impl> pOptions;
static sal_Int32 nRefCount = 0;
typedef OUString SvtDefaultOptions_Impl:: *PathStrPtr; typedef OUString SvtDefaultOptions_Impl:: *PathStrPtr;
...@@ -313,6 +313,12 @@ SvtDefaultOptions_Impl::SvtDefaultOptions_Impl() : ConfigItem( "Office.Common/Pa ...@@ -313,6 +313,12 @@ SvtDefaultOptions_Impl::SvtDefaultOptions_Impl() : ConfigItem( "Office.Common/Pa
} }
} }
SvtDefaultOptions_Impl::~SvtDefaultOptions_Impl()
{
if ( IsModified() )
Commit();
}
// class SvtDefaultOptions ----------------------------------------------- // class SvtDefaultOptions -----------------------------------------------
namespace { struct lclMutex : public rtl::Static< ::osl::Mutex, lclMutex > {}; } namespace { struct lclMutex : public rtl::Static< ::osl::Mutex, lclMutex > {}; }
...@@ -320,25 +326,20 @@ SvtDefaultOptions::SvtDefaultOptions() ...@@ -320,25 +326,20 @@ SvtDefaultOptions::SvtDefaultOptions()
{ {
// Global access, must be guarded (multithreading) // Global access, must be guarded (multithreading)
::osl::MutexGuard aGuard( lclMutex::get() ); ::osl::MutexGuard aGuard( lclMutex::get() );
if ( !pOptions ) pImpl = pOptions.lock();
if ( !pImpl )
{ {
pOptions = new SvtDefaultOptions_Impl; pImpl = std::make_shared<SvtDefaultOptions_Impl>();
pOptions = pImpl;
ItemHolder1::holdConfigItem(E_DEFAULTOPTIONS); ItemHolder1::holdConfigItem(E_DEFAULTOPTIONS);
} }
++nRefCount;
pImpl.reset(pOptions);
} }
SvtDefaultOptions::~SvtDefaultOptions() SvtDefaultOptions::~SvtDefaultOptions()
{ {
// Global access, must be guarded (multithreading) // Global access, must be guarded (multithreading)
::osl::MutexGuard aGuard( lclMutex::get() ); ::osl::MutexGuard aGuard( lclMutex::get() );
if ( !--nRefCount ) pImpl.reset();
{
if ( pOptions->IsModified() )
pOptions->Commit();
DELETEZ( pOptions );
}
} }
OUString SvtDefaultOptions::GetDefaultPath( sal_uInt16 nId ) const OUString SvtDefaultOptions::GetDefaultPath( sal_uInt16 nId ) const
......
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