[Libreoffice-commits] core.git: sfx2/source svl/source

Noel Grandin noel.grandin at collabora.co.uk
Fri Oct 6 11:49:12 UTC 2017


 sfx2/source/control/bindings.cxx |   13 +++++------
 sfx2/source/control/statcach.cxx |   40 +++++++++++------------------------
 sfx2/source/inc/statcach.hxx     |    9 ++++---
 svl/source/numbers/numfmuno.cxx  |   44 ++++++++++++++++-----------------------
 svl/source/numbers/numfmuno.hxx  |   12 ++++++----
 5 files changed, 50 insertions(+), 68 deletions(-)

New commits:
commit a5dbe5a8a9e98f2d79f2c535182fc557b561ed0f
Author: Noel Grandin <noel.grandin at collabora.co.uk>
Date:   Fri Oct 6 12:17:55 2017 +0200

    use rtl::Reference in svl,sfx2
    
    instead of manual ref-counting
    
    Change-Id: Icb6472ffadfb57c9723b26f6f247e78fff45e528
    Reviewed-on: https://gerrit.libreoffice.org/43193
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>

diff --git a/sfx2/source/control/bindings.cxx b/sfx2/source/control/bindings.cxx
index a8d3124e9e1c..cc3990ba70f6 100644
--- a/sfx2/source/control/bindings.cxx
+++ b/sfx2/source/control/bindings.cxx
@@ -1567,16 +1567,15 @@ SfxItemState SfxBindings::QueryState( sal_uInt16 nSlot, std::unique_ptr<SfxPoolI
                 }
 
                 SfxItemState eState = SfxItemState::SET;
-                BindDispatch_Impl *pBind = new BindDispatch_Impl( xDisp, aURL, pCache, pSlot );
-                pBind->acquire();
-                xDisp->addStatusListener( pBind, aURL );
-                if ( !pBind->GetStatus().IsEnabled )
+                rtl::Reference<BindDispatch_Impl> xBind(new BindDispatch_Impl( xDisp, aURL, pCache, pSlot ));
+                xDisp->addStatusListener( xBind.get(), aURL );
+                if ( !xBind->GetStatus().IsEnabled )
                 {
                     eState = SfxItemState::DISABLED;
                 }
                 else
                 {
-                    css::uno::Any aAny = pBind->GetStatus().State;
+                    css::uno::Any aAny = xBind->GetStatus().State;
                     css::uno::Type aType = aAny.getValueType();
 
                     if ( aType == cppu::UnoType<bool>::get() )
@@ -1607,8 +1606,8 @@ SfxItemState SfxBindings::QueryState( sal_uInt16 nSlot, std::unique_ptr<SfxPoolI
                         rpState.reset(new SfxVoidItem( nSlot ));
                 }
 
-                xDisp->removeStatusListener( pBind, aURL );
-                pBind->Release();
+                xDisp->removeStatusListener( xBind.get(), aURL );
+                xBind.clear();
                 if ( bDeleteCache )
                     DELETEZ( pCache );
                 return eState;
diff --git a/sfx2/source/control/statcach.cxx b/sfx2/source/control/statcach.cxx
index 1d0d794c428b..a8654ba26f77 100644
--- a/sfx2/source/control/statcach.cxx
+++ b/sfx2/source/control/statcach.cxx
@@ -145,16 +145,13 @@ void SAL_CALL  BindDispatch_Impl::statusChanged( const css::frame::FeatureStateE
     }
 }
 
-void BindDispatch_Impl::Release()
+BindDispatch_Impl::~BindDispatch_Impl()
 {
     if ( xDisp.is() )
     {
         xDisp->removeStatusListener( static_cast<css::frame::XStatusListener*>(this), aURL );
         xDisp.clear();
     }
-
-    pCache = nullptr;
-    release();
 }
 
 
@@ -180,7 +177,6 @@ sal_Int16 BindDispatch_Impl::Dispatch( const css::uno::Sequence < css::beans::Pr
 // This constructor for an invalid cache that is updated in the first request.
 
 SfxStateCache::SfxStateCache( sal_uInt16 nFuncId ):
-    pDispatch( nullptr ),
     nId(nFuncId),
     pInternalController(nullptr),
     pController(nullptr),
@@ -201,11 +197,6 @@ SfxStateCache::~SfxStateCache()
     DBG_ASSERT( pController == nullptr && pInternalController == nullptr, "there are still Controllers registered" );
     if ( !IsInvalidItem(pLastItem) )
         delete pLastItem;
-    if ( pDispatch )
-    {
-        pDispatch->Release();
-        pDispatch = nullptr;
-    }
 }
 
 
@@ -217,11 +208,7 @@ void SfxStateCache::Invalidate( bool bWithMsg )
     {
         bSlotDirty = true;
         aSlotServ.SetSlot( nullptr );
-        if ( pDispatch )
-        {
-            pDispatch->Release();
-            pDispatch = nullptr;
-        }
+        mxDispatch.clear();
     }
 }
 
@@ -236,7 +223,7 @@ const SfxSlotServer* SfxStateCache::GetSlotServer( SfxDispatcher &rDispat , cons
         // get the SlotServer; we need it for internal controllers anyway, but also in most cases
         rDispat.FindServer_( nId, aSlotServ, false );
 
-        DBG_ASSERT( !pDispatch, "Old Dispatch not removed!" );
+        DBG_ASSERT( !mxDispatch.is(), "Old Dispatch not removed!" );
 
         // we don't need to check the dispatch provider if we only have an internal controller
         if ( xProv.is() )
@@ -291,13 +278,12 @@ const SfxSlotServer* SfxStateCache::GetSlotServer( SfxDispatcher &rDispat , cons
                 }
 
                 // so the dispatch object isn't a SfxDispatcher wrapper or it is one, but it uses another dispatcher, but not rDispat
-                pDispatch = new BindDispatch_Impl( xDisp, aURL, this, pSlot );
-                pDispatch->acquire();
+                mxDispatch = new BindDispatch_Impl( xDisp, aURL, this, pSlot );
 
                 // flags must be set before adding StatusListener because the dispatch object will set the state
                 bSlotDirty = false;
                 bCtrlDirty = true;
-                xDisp->addStatusListener( pDispatch, aURL );
+                xDisp->addStatusListener( mxDispatch.get(), aURL );
             }
             else if ( rDispat.GetFrame() )
             {
@@ -367,7 +353,7 @@ void SfxStateCache::SetVisibleState( bool bShow )
         }
 
         // Update Controller
-        if ( !pDispatch && pController )
+        if ( !mxDispatch.is() && pController )
         {
             for ( SfxControllerItem *pCtrl = pController;
                     pCtrl;
@@ -416,7 +402,7 @@ void SfxStateCache::SetState_Impl
     if ( bNotify )
     {
         // Update Controller
-        if ( !pDispatch && pController )
+        if ( !mxDispatch.is() && pController )
         {
             for ( SfxControllerItem *pCtrl = pController;
                 pCtrl;
@@ -454,7 +440,7 @@ void SfxStateCache::SetCachedState( bool bAlways )
     if ( bAlways || ( !bItemDirty && !bSlotDirty ) )
     {
         // Update Controller
-        if ( !pDispatch && pController )
+        if ( !mxDispatch.is() && pController )
         {
             for ( SfxControllerItem *pCtrl = pController;
                 pCtrl;
@@ -473,24 +459,24 @@ void SfxStateCache::SetCachedState( bool bAlways )
 
 css::uno::Reference< css::frame::XDispatch >  SfxStateCache::GetDispatch() const
 {
-    if ( pDispatch )
-        return pDispatch->xDisp;
+    if ( mxDispatch.is() )
+        return mxDispatch->xDisp;
     return css::uno::Reference< css::frame::XDispatch > ();
 }
 
 sal_Int16 SfxStateCache::Dispatch( const SfxItemSet* pSet, bool bForceSynchron )
 {
     // protect pDispatch against destruction in the call
-    css::uno::Reference < css::frame::XStatusListener > xKeepAlive( pDispatch );
+    rtl::Reference<BindDispatch_Impl> xKeepAlive( mxDispatch );
     sal_Int16 eRet = css::frame::DispatchResultState::DONTKNOW;
 
-    if ( pDispatch )
+    if ( mxDispatch.is() )
     {
         uno::Sequence < beans::PropertyValue > aArgs;
         if (pSet)
             TransformItems( nId, *pSet, aArgs );
 
-        eRet = pDispatch->Dispatch( aArgs, bForceSynchron );
+        eRet = mxDispatch->Dispatch( aArgs, bForceSynchron );
     }
 
     return eRet;
diff --git a/sfx2/source/inc/statcach.hxx b/sfx2/source/inc/statcach.hxx
index 6f17fe20dbb7..ef09b5dd51c4 100644
--- a/sfx2/source/inc/statcach.hxx
+++ b/sfx2/source/inc/statcach.hxx
@@ -46,11 +46,11 @@ public:
                                 const css::uno::Reference< css::frame::XDispatch > & rDisp,
                                 const css::util::URL& rURL,
                                 SfxStateCache* pStateCache, const SfxSlot* pSlot );
+                            ~BindDispatch_Impl() override;
 
-    virtual void SAL_CALL           statusChanged( const css::frame::FeatureStateEvent& Event ) override;
-    virtual void SAL_CALL           disposing( const css::lang::EventObject& Source ) override;
+    virtual void SAL_CALL   statusChanged( const css::frame::FeatureStateEvent& Event ) override;
+    virtual void SAL_CALL   disposing( const css::lang::EventObject& Source ) override;
 
-    void                    Release();
     const css::frame::FeatureStateEvent& GetStatus() const { return aStatus;}
     sal_Int16               Dispatch( const css::uno::Sequence < css::beans::PropertyValue >& aProps, bool bForceSynchron );
 };
@@ -58,7 +58,8 @@ public:
 class SfxStateCache
 {
 friend class BindDispatch_Impl;
-    BindDispatch_Impl*      pDispatch;
+    rtl::Reference<BindDispatch_Impl>
+                            mxDispatch;
     sal_uInt16              nId;           // Slot-Id
     SfxControllerItem*      pInternalController;
     css::uno::Reference < css::frame::XDispatch > xMyDispatch;
diff --git a/svl/source/numbers/numfmuno.cxx b/svl/source/numbers/numfmuno.cxx
index bc0b44675cfc..8b09da2f7fd3 100644
--- a/svl/source/numbers/numfmuno.cxx
+++ b/svl/source/numbers/numfmuno.cxx
@@ -346,15 +346,13 @@ uno::Sequence<OUString> SAL_CALL SvNumberFormatterServiceObj::getSupportedServic
 }
 
 SvNumberFormatsObj::SvNumberFormatsObj( SvNumberFormatsSupplierObj& _rParent, ::comphelper::SharedMutex const & _rMutex )
-    :rSupplier( _rParent )
+    :m_xSupplier( &_rParent )
     ,m_aMutex( _rMutex )
 {
-    rSupplier.acquire();
 }
 
 SvNumberFormatsObj::~SvNumberFormatsObj()
 {
-    rSupplier.release();
 }
 
 // XNumberFormats
@@ -363,12 +361,12 @@ uno::Reference<beans::XPropertySet> SAL_CALL SvNumberFormatsObj::getByKey( sal_I
 {
     ::osl::MutexGuard aGuard( m_aMutex );
 
-    SvNumberFormatter* pFormatter = rSupplier.GetNumberFormatter();
+    SvNumberFormatter* pFormatter = m_xSupplier->GetNumberFormatter();
     const SvNumberformat* pFormat = pFormatter ? pFormatter->GetEntry(nKey) : nullptr;
     if (!pFormat)
         throw uno::RuntimeException();
 
-    return new SvNumberFormatObj( rSupplier, nKey, m_aMutex );
+    return new SvNumberFormatObj( *m_xSupplier, nKey, m_aMutex );
 }
 
 uno::Sequence<sal_Int32> SAL_CALL SvNumberFormatsObj::queryKeys( sal_Int16 nType,
@@ -377,7 +375,7 @@ uno::Sequence<sal_Int32> SAL_CALL SvNumberFormatsObj::queryKeys( sal_Int16 nType
 {
     ::osl::MutexGuard aGuard( m_aMutex );
 
-    SvNumberFormatter* pFormatter = rSupplier.GetNumberFormatter();
+    SvNumberFormatter* pFormatter = m_xSupplier->GetNumberFormatter();
     if ( !pFormatter )
         throw uno::RuntimeException();
 
@@ -402,7 +400,7 @@ sal_Int32 SAL_CALL SvNumberFormatsObj::queryKey( const OUString& aFormat,
 {
     ::osl::MutexGuard aGuard( m_aMutex );
 
-    SvNumberFormatter* pFormatter = rSupplier.GetNumberFormatter();
+    SvNumberFormatter* pFormatter = m_xSupplier->GetNumberFormatter();
     if (!pFormatter)
         throw uno::RuntimeException();
 
@@ -421,7 +419,7 @@ sal_Int32 SAL_CALL SvNumberFormatsObj::addNew( const OUString& aFormat,
     ::osl::MutexGuard aGuard( m_aMutex );
 
     sal_Int32 nRet = 0;
-    SvNumberFormatter* pFormatter = rSupplier.GetNumberFormatter();
+    SvNumberFormatter* pFormatter = m_xSupplier->GetNumberFormatter();
     if (!pFormatter)
         throw uno::RuntimeException();
 
@@ -450,7 +448,7 @@ sal_Int32 SAL_CALL SvNumberFormatsObj::addNewConverted( const OUString& aFormat,
     ::osl::MutexGuard aGuard( m_aMutex );
 
     sal_Int32 nRet = 0;
-    SvNumberFormatter* pFormatter = rSupplier.GetNumberFormatter();
+    SvNumberFormatter* pFormatter = m_xSupplier->GetNumberFormatter();
     if (!pFormatter)
         throw uno::RuntimeException();
 
@@ -476,7 +474,7 @@ sal_Int32 SAL_CALL SvNumberFormatsObj::addNewConverted( const OUString& aFormat,
 void SAL_CALL SvNumberFormatsObj::removeByKey( sal_Int32 nKey )
 {
     ::osl::MutexGuard aGuard( m_aMutex );
-    SvNumberFormatter* pFormatter = rSupplier.GetNumberFormatter();
+    SvNumberFormatter* pFormatter = m_xSupplier->GetNumberFormatter();
 
     if (pFormatter)
     {
@@ -492,7 +490,7 @@ OUString SAL_CALL SvNumberFormatsObj::generateFormat( sal_Int32 nBaseKey,
 {
     ::osl::MutexGuard aGuard( m_aMutex );
 
-    SvNumberFormatter* pFormatter = rSupplier.GetNumberFormatter();
+    SvNumberFormatter* pFormatter = m_xSupplier->GetNumberFormatter();
     if (!pFormatter)
         throw uno::RuntimeException();
 
@@ -507,7 +505,7 @@ sal_Int32 SAL_CALL SvNumberFormatsObj::getStandardIndex( const lang::Locale& nLo
 {
     ::osl::MutexGuard aGuard( m_aMutex );
 
-    SvNumberFormatter* pFormatter = rSupplier.GetNumberFormatter();
+    SvNumberFormatter* pFormatter = m_xSupplier->GetNumberFormatter();
     if (!pFormatter)
         throw uno::RuntimeException();
 
@@ -520,7 +518,7 @@ sal_Int32 SAL_CALL SvNumberFormatsObj::getStandardFormat( sal_Int16 nType, const
 {
     ::osl::MutexGuard aGuard( m_aMutex );
 
-    SvNumberFormatter* pFormatter = rSupplier.GetNumberFormatter();
+    SvNumberFormatter* pFormatter = m_xSupplier->GetNumberFormatter();
     if (!pFormatter)
         throw uno::RuntimeException();
 
@@ -536,7 +534,7 @@ sal_Int32 SAL_CALL SvNumberFormatsObj::getFormatIndex( sal_Int16 nIndex, const l
 {
     ::osl::MutexGuard aGuard( m_aMutex );
 
-    SvNumberFormatter* pFormatter = rSupplier.GetNumberFormatter();
+    SvNumberFormatter* pFormatter = m_xSupplier->GetNumberFormatter();
     if (!pFormatter)
         throw uno::RuntimeException();
 
@@ -556,7 +554,7 @@ sal_Int32 SAL_CALL SvNumberFormatsObj::getFormatForLocale( sal_Int32 nKey, const
 {
     ::osl::MutexGuard aGuard( m_aMutex );
 
-    SvNumberFormatter* pFormatter = rSupplier.GetNumberFormatter();
+    SvNumberFormatter* pFormatter = m_xSupplier->GetNumberFormatter();
     if (!pFormatter)
         throw uno::RuntimeException();
 
@@ -583,16 +581,14 @@ uno::Sequence<OUString> SAL_CALL SvNumberFormatsObj::getSupportedServiceNames()
 }
 
 SvNumberFormatObj::SvNumberFormatObj( SvNumberFormatsSupplierObj& rParent, sal_uLong nK, const ::comphelper::SharedMutex& _rMutex )
-    :rSupplier( rParent )
+    :m_xSupplier( &rParent )
     ,nKey( nK )
     ,m_aMutex( _rMutex )
 {
-    rSupplier.acquire();
 }
 
 SvNumberFormatObj::~SvNumberFormatObj()
 {
-    rSupplier.release();
 }
 
 // XPropertySet
@@ -616,7 +612,7 @@ uno::Any SAL_CALL SvNumberFormatObj::getPropertyValue( const OUString& aProperty
     ::osl::MutexGuard aGuard( m_aMutex );
 
     uno::Any aRet;
-    SvNumberFormatter* pFormatter = rSupplier.GetNumberFormatter();
+    SvNumberFormatter* pFormatter = m_xSupplier->GetNumberFormatter();
     const SvNumberformat* pFormat = pFormatter ? pFormatter->GetEntry(nKey) : nullptr;
     if (!pFormat)
         throw uno::RuntimeException();
@@ -730,7 +726,7 @@ uno::Sequence<beans::PropertyValue> SAL_CALL SvNumberFormatObj::getPropertyValue
 {
     ::osl::MutexGuard aGuard( m_aMutex );
 
-    SvNumberFormatter* pFormatter = rSupplier.GetNumberFormatter();
+    SvNumberFormatter* pFormatter = m_xSupplier->GetNumberFormatter();
     const SvNumberformat* pFormat = pFormatter ? pFormatter->GetEntry(nKey) : nullptr;
     if (!pFormat)
         throw uno::RuntimeException();
@@ -796,15 +792,13 @@ uno::Sequence<OUString> SAL_CALL SvNumberFormatObj::getSupportedServiceNames()
 }
 
 SvNumberFormatSettingsObj::SvNumberFormatSettingsObj( SvNumberFormatsSupplierObj& rParent, const ::comphelper::SharedMutex& _rMutex )
-    :rSupplier( rParent )
+    :m_xSupplier( &rParent )
     ,m_aMutex( _rMutex )
 {
-    rSupplier.acquire();
 }
 
 SvNumberFormatSettingsObj::~SvNumberFormatSettingsObj()
 {
-    rSupplier.release();
 }
 
 // XPropertySet
@@ -822,7 +816,7 @@ void SAL_CALL SvNumberFormatSettingsObj::setPropertyValue( const OUString& aProp
 {
     ::osl::MutexGuard aGuard( m_aMutex );
 
-    SvNumberFormatter* pFormatter = rSupplier.GetNumberFormatter();
+    SvNumberFormatter* pFormatter = m_xSupplier->GetNumberFormatter();
     if (!pFormatter)
         throw uno::RuntimeException();
 
@@ -860,7 +854,7 @@ uno::Any SAL_CALL SvNumberFormatSettingsObj::getPropertyValue( const OUString& a
     ::osl::MutexGuard aGuard( m_aMutex );
 
     uno::Any aRet;
-    SvNumberFormatter* pFormatter = rSupplier.GetNumberFormatter();
+    SvNumberFormatter* pFormatter = m_xSupplier->GetNumberFormatter();
     if (!pFormatter)
         throw uno::RuntimeException();
 
diff --git a/svl/source/numbers/numfmuno.hxx b/svl/source/numbers/numfmuno.hxx
index 3885e2d4a17f..f68f73459b75 100644
--- a/svl/source/numbers/numfmuno.hxx
+++ b/svl/source/numbers/numfmuno.hxx
@@ -87,8 +87,8 @@ class SvNumberFormatsObj : public cppu::WeakImplHelper<
                                         css::lang::XServiceInfo>
 {
 private:
-    SvNumberFormatsSupplierObj&         rSupplier;
-    mutable ::comphelper::SharedMutex   m_aMutex;
+    rtl::Reference<SvNumberFormatsSupplierObj> m_xSupplier;
+    mutable ::comphelper::SharedMutex          m_aMutex;
 
 public:
                     SvNumberFormatsObj(SvNumberFormatsSupplierObj& pParent, ::comphelper::SharedMutex const & _rMutex);
@@ -135,8 +135,9 @@ class SvNumberFormatObj : public cppu::WeakImplHelper<
                                         css::lang::XServiceInfo>
 {
 private:
-    SvNumberFormatsSupplierObj&         rSupplier;
-    sal_uLong                               nKey;
+    rtl::Reference<SvNumberFormatsSupplierObj>
+                                        m_xSupplier;
+    sal_uLong                           nKey;
     mutable ::comphelper::SharedMutex   m_aMutex;
 
 public:
@@ -181,7 +182,8 @@ class SvNumberFormatSettingsObj : public cppu::WeakImplHelper<
                                         css::lang::XServiceInfo>
 {
 private:
-    SvNumberFormatsSupplierObj&         rSupplier;
+    rtl::Reference<SvNumberFormatsSupplierObj>
+                                        m_xSupplier;
     mutable ::comphelper::SharedMutex   m_aMutex;
 
 public:


More information about the Libreoffice-commits mailing list