summaryrefslogtreecommitdiff
path: root/dbaccess
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2024-09-17 19:20:51 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2024-09-18 08:06:55 +0200
commit26fd88df801c91117b8819e2a1afb898d2612eba (patch)
treeff51adc4e0564107d6e474227b24906982e6958b /dbaccess
parentf7354e18731ae41ab86584b04b0b23bee844f3dd (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.cxx20
-rw-r--r--dbaccess/source/core/api/RowSet.hxx5
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;