[Libreoffice-commits] core.git: Branch 'libreoffice-6-0' - compilerplugins/clang dbaccess/source
Michael Stahl
mstahl at redhat.com
Thu Feb 1 09:10:29 UTC 2018
compilerplugins/clang/refcounting.cxx | 4 ++++
dbaccess/source/core/dataaccess/datasource.cxx | 5 +++--
dbaccess/source/core/dataaccess/datasource.hxx | 3 ++-
3 files changed, 9 insertions(+), 3 deletions(-)
New commits:
commit 66baf6cf11e333936a4404d3a02d44a19e6a440c
Author: Michael Stahl <mstahl at redhat.com>
Date: Wed Jan 31 14:34:31 2018 +0100
tdf#114596 dbaccess: fix mysterious dataloss bug
OBookmarkContainer actually re-uses the reference count of
ODatabaseSource, so converting ODatabaseSource::m_aBookmark to Reference
created a cycle, which somehow causes the dataloss, because evidently
something as important as storing the data must be done in the
destructor.
(regression from 2660d24a07866e083c5135ea263030f3e3a2e729)
(cherry picked from commit 96ae2a3300811897c24cccb20f8c2faf382483df)
tdf#114596 compilerplugins: add exception to [loplugin:refcounting]
(cherry picked from commit e80da60895b45309fa1d018760d5f11cca4367f4)
Change-Id: I4cad01dc9cdaf405c1eb31d6c0e161eb6712b78f
Reviewed-on: https://gerrit.libreoffice.org/49025
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>
diff --git a/compilerplugins/clang/refcounting.cxx b/compilerplugins/clang/refcounting.cxx
index 58a9884ede0d..8957221dbb22 100644
--- a/compilerplugins/clang/refcounting.cxx
+++ b/compilerplugins/clang/refcounting.cxx
@@ -148,6 +148,10 @@ bool containsXInterfaceSubclass(const clang::Type* pType0) {
if (isDerivedFrom(pRecordDecl, [](Decl const * decl) -> bool { return bool(loplugin::DeclCheck(decl).Class("XPropertyList").GlobalNamespace()); })) { // module svx
return false;
}
+ // tdf#114596
+ if (isDerivedFrom(pRecordDecl, [](Decl const * decl) -> bool { return bool(loplugin::DeclCheck(decl).Class("OBookmarkContainer").Namespace("dbaccess").GlobalNamespace()); })) { // module dbaccess
+ return false;
+ }
}
if (pRecordDecl) {
const ClassTemplateSpecializationDecl* pTemplate = dyn_cast<ClassTemplateSpecializationDecl>(pRecordDecl);
diff --git a/dbaccess/source/core/dataaccess/datasource.cxx b/dbaccess/source/core/dataaccess/datasource.cxx
index d37c5f3325c3..f4e8f204d24b 100644
--- a/dbaccess/source/core/dataaccess/datasource.cxx
+++ b/dbaccess/source/core/dataaccess/datasource.cxx
@@ -472,7 +472,7 @@ ODatabaseSource::ODatabaseSource(const ::rtl::Reference<ODatabaseModelImpl>& _pI
:ModelDependentComponent( _pImpl )
,ODatabaseSource_Base( getMutex() )
,OPropertySetHelper( ODatabaseSource_Base::rBHelper )
- ,m_xBookmarks( new OBookmarkContainer( *this, getMutex() ) )
+ , m_Bookmarks(*this, getMutex())
,m_aFlushListeners( getMutex() )
{
// some kind of default
@@ -1153,7 +1153,8 @@ Reference< XConnection > ODatabaseSource::getConnection(const OUString& user, co
Reference< XNameAccess > SAL_CALL ODatabaseSource::getBookmarks( )
{
ModelMethodGuard aGuard( *this );
- return static_cast< XNameContainer* >(m_xBookmarks.get());
+ // tdf#114596 this may look nutty but see OBookmarkContainer::aquire()
+ return static_cast<XNameContainer*>(&m_Bookmarks);
}
Reference< XNameAccess > SAL_CALL ODatabaseSource::getQueryDefinitions( )
diff --git a/dbaccess/source/core/dataaccess/datasource.hxx b/dbaccess/source/core/dataaccess/datasource.hxx
index c513064a2dd5..7d772d814983 100644
--- a/dbaccess/source/core/dataaccess/datasource.hxx
+++ b/dbaccess/source/core/dataaccess/datasource.hxx
@@ -82,7 +82,8 @@ class ODatabaseSource :public ModelDependentComponent // must be first
private:
using ODatabaseSource_Base::rBHelper;
- rtl::Reference<OBookmarkContainer> m_xBookmarks;
+ // note: this thing uses the ref-count of "this", see OBookmarkContainer::acquire!
+ OBookmarkContainer m_Bookmarks;
::comphelper::OInterfaceContainerHelper2 m_aFlushListeners;
private:
More information about the Libreoffice-commits
mailing list