diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2024-09-17 19:20:51 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2024-09-18 08:06:55 +0200 |
commit | 26fd88df801c91117b8819e2a1afb898d2612eba (patch) | |
tree | ff51adc4e0564107d6e474227b24906982e6958b /dbaccess | |
parent | f7354e18731ae41ab86584b04b0b23bee844f3dd (diff) |
remove OSubComponent from RowSet
which attempts to implement a very dodgy and almost but not actually
thread-safe dispose function. Rather just hold a weak reference to the
rowset that created us.
Change-Id: I1881ac34320b61866eefc3641b455f618d0759d2
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173573
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Tested-by: Jenkins
Diffstat (limited to 'dbaccess')
-rw-r--r-- | dbaccess/source/core/api/RowSet.cxx | 20 | ||||
-rw-r--r-- | dbaccess/source/core/api/RowSet.hxx | 5 |
2 files changed, 13 insertions, 12 deletions
diff --git a/dbaccess/source/core/api/RowSet.cxx b/dbaccess/source/core/api/RowSet.cxx index 46c4984f7439..0b6e7c5a885a 100644 --- a/dbaccess/source/core/api/RowSet.cxx +++ b/dbaccess/source/core/api/RowSet.cxx @@ -2708,9 +2708,9 @@ void ORowSet::impl_rebuild_throw(::osl::ResettableMutexGuard& _rGuard) // *********************************************************** ORowSetClone::ORowSetClone( const Reference<XComponentContext>& _rContext, ORowSet& rParent, ::osl::Mutex* _pMutex ) - :OSubComponent(m_aMutex, rParent) + : ::cppu::WeakComponentImplHelper<>(m_aMutex) ,ORowSetBase( _rContext, WeakComponentImplHelper::rBHelper, _pMutex ) - ,m_pParent(&rParent) + ,m_xParent(&rParent) ,m_nFetchDirection(rParent.m_nFetchDirection) ,m_nFetchSize(rParent.m_nFetchSize) ,m_bIsBookmarkable(true) @@ -2801,7 +2801,7 @@ ORowSetClone::~ORowSetClone() // css::XTypeProvider Sequence< Type > ORowSetClone::getTypes() { - return ::comphelper::concatSequences(OSubComponent::getTypes(),ORowSetBase::getTypes()); + return ::comphelper::concatSequences(::cppu::WeakComponentImplHelper<>::getTypes(),ORowSetBase::getTypes()); } // css::XInterface @@ -2809,18 +2809,18 @@ Any ORowSetClone::queryInterface( const Type & rType ) { Any aRet = ORowSetBase::queryInterface(rType); if(!aRet.hasValue()) - aRet = OSubComponent::queryInterface(rType); + aRet = ::cppu::WeakComponentImplHelper<>::queryInterface(rType); return aRet; } void ORowSetClone::acquire() noexcept { - OSubComponent::acquire(); + ::cppu::WeakComponentImplHelper<>::acquire(); } void ORowSetClone::release() noexcept { - OSubComponent::release(); + ::cppu::WeakComponentImplHelper<>::release(); } // XServiceInfo @@ -2845,9 +2845,9 @@ void ORowSetClone::disposing() MutexGuard aGuard( m_aMutex ); ORowSetBase::disposing(); - m_pParent = nullptr; + m_xParent = nullptr; m_pMutex = &m_aMutex; // this must be done here because someone could hold a ref to us and try to do something - OSubComponent::disposing(); + ::cppu::WeakComponentImplHelper<>::disposing(); } // XCloseable @@ -2879,8 +2879,8 @@ void SAL_CALL ORowSetClone::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,c { if ( nHandle == PROPERTY_ID_FETCHSIZE ) { - if ( m_pParent ) - m_pParent->setFastPropertyValue_NoBroadcast( nHandle, rValue ); + if ( auto xParent = m_xParent.get() ) + xParent->setFastPropertyValue_NoBroadcast( nHandle, rValue ); } OPropertyStateContainer::setFastPropertyValue_NoBroadcast(nHandle,rValue); diff --git a/dbaccess/source/core/api/RowSet.hxx b/dbaccess/source/core/api/RowSet.hxx index 3cf6fe690193..92d9e53f7461 100644 --- a/dbaccess/source/core/api/RowSet.hxx +++ b/dbaccess/source/core/api/RowSet.hxx @@ -48,6 +48,7 @@ #include <connectivity/paramwrapper.hxx> #include <connectivity/FValue.hxx> #include <connectivity/warningscontainer.hxx> +#include <unotools/weakref.hxx> namespace dbaccess { @@ -445,11 +446,11 @@ namespace dbaccess // ORowSetClone class ORowSetClone : public cppu::BaseMutex - ,public OSubComponent + ,public ::cppu::WeakComponentImplHelper<> ,public ORowSetBase ,public ::comphelper::OPropertyArrayUsageHelper < ORowSetClone > { - ORowSet* m_pParent; + unotools::WeakReference<ORowSet> m_xParent; sal_Int32 m_nFetchDirection; sal_Int32 m_nFetchSize; bool m_bIsBookmarkable; |