include/svx/sdr/contact/viewcontact.hxx | 4 -- include/svx/sdr/contact/viewobjectcontactofsdrobj.hxx | 2 - svx/inc/sdr/contact/viewcontactofsdrpage.hxx | 7 ---- svx/source/sdr/contact/viewcontactofsdrpage.cxx | 29 +----------------- svx/source/sdr/contact/viewobjectcontactofsdrobj.cxx | 9 +---- sw/source/core/access/acccontext.cxx | 2 - 6 files changed, 6 insertions(+), 47 deletions(-)
New commits: commit 3bcf854a2f3da83e641f74302ef3745166ca8137 Author: Caolán McNamara <[email protected]> AuthorDate: Wed Oct 16 20:54:02 2024 +0100 Commit: Caolán McNamara <[email protected]> CommitDate: Thu Oct 17 22:16:52 2024 +0200 cid#1557611 Data race condition Change-Id: Id8a60317bcf068132900d4aff8d64dd9ad6dd8c2 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/175064 Tested-by: Jenkins Reviewed-by: Caolán McNamara <[email protected]> diff --git a/sw/source/core/access/acccontext.cxx b/sw/source/core/access/acccontext.cxx index a27228c506e1..52a35642a9e9 100644 --- a/sw/source/core/access/acccontext.cxx +++ b/sw/source/core/access/acccontext.cxx @@ -478,7 +478,7 @@ void SwAccessibleContext::FireStateChangedEvent( sal_Int64 nState, void SwAccessibleContext::GetStates( sal_Int64& rStateSet ) { - SolarMutexGuard aGuard; + std::scoped_lock aGuard( m_Mutex ); // SHOWING if (m_isShowingState) commit 819cae19dbdf45188a004136dc3c5a0a6cdec1b8 Author: Caolán McNamara <[email protected]> AuthorDate: Thu Oct 17 16:12:45 2024 +0100 Commit: Caolán McNamara <[email protected]> CommitDate: Thu Oct 17 22:16:40 2024 +0200 tdf#159007 Revert "optimization to skip SdrObject::GetViewContent()" This reverts commit 313be607903a381830600c0a60b2e299fcaec685. Change-Id: I2dc7489ecc302473edd763fd0e4d6784fadc9bb4 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/175094 Tested-by: Jenkins Reviewed-by: Caolán McNamara <[email protected]> diff --git a/include/svx/sdr/contact/viewcontact.hxx b/include/svx/sdr/contact/viewcontact.hxx index 00b7f6253eae..a3ddcf760a58 100644 --- a/include/svx/sdr/contact/viewcontact.hxx +++ b/include/svx/sdr/contact/viewcontact.hxx @@ -153,9 +153,7 @@ public: // It is always possible to delete the VOCs, these are re-created on demand void flushViewObjectContacts(bool bWithHierarchy = true); - // helper around getPrimitive2DSequenceHierarchy to enable a given implementation - // to optimize getting a Primitive2DSequenceHierarchy for a child of index a - virtual void getPrimitive2DSequenceHierarchyOfIndex( + void getPrimitive2DSequenceHierarchyOfIndex( sal_uInt32 a, DisplayInfo& rDisplayInfo, ObjectContact& rObjectContact, drawinglayer::primitive2d::Primitive2DDecompositionVisitor& rVisitor); }; diff --git a/include/svx/sdr/contact/viewobjectcontactofsdrobj.hxx b/include/svx/sdr/contact/viewobjectcontactofsdrobj.hxx index 0ea6f307a22c..5989559c758e 100644 --- a/include/svx/sdr/contact/viewobjectcontactofsdrobj.hxx +++ b/include/svx/sdr/contact/viewobjectcontactofsdrobj.hxx @@ -56,8 +56,6 @@ public: This method cares for this, by retrieving the very original OutputDevice. */ const OutputDevice* getPageViewOutputDevice() const; - - static bool isObjectVisibleOnAnyLayer(const SdrObject& rObject, const SdrLayerIDSet& rLayers); }; } diff --git a/svx/inc/sdr/contact/viewcontactofsdrpage.hxx b/svx/inc/sdr/contact/viewcontactofsdrpage.hxx index 0f7143aebcda..98d6f577e86e 100644 --- a/svx/inc/sdr/contact/viewcontactofsdrpage.hxx +++ b/svx/inc/sdr/contact/viewcontactofsdrpage.hxx @@ -113,19 +113,12 @@ class ViewContactOfPageHierarchy final : public ViewContactOfPageSubObject virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact) override; virtual void createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor& rVisitor) const override; - SdrObject& GetSdrObject(sal_uInt32 nIndex) const; - public: explicit ViewContactOfPageHierarchy(ViewContactOfSdrPage& rParentViewContactOfSdrPage); virtual ~ViewContactOfPageHierarchy() override; virtual sal_uInt32 GetObjectCount() const override; virtual ViewContact& GetViewContact(sal_uInt32 nIndex) const override; - - // optimize version of parent impl to quicker skip hidden SdrObjects - virtual void getPrimitive2DSequenceHierarchyOfIndex( - sal_uInt32 a, DisplayInfo& rDisplayInfo, ObjectContact& rObjectContact, - drawinglayer::primitive2d::Primitive2DDecompositionVisitor& rVisitor) override; }; class ViewContactOfGrid final : public ViewContactOfPageSubObject diff --git a/svx/source/sdr/contact/viewcontactofsdrpage.cxx b/svx/source/sdr/contact/viewcontactofsdrpage.cxx index c07bcffe762d..dee5ab7865db 100644 --- a/svx/source/sdr/contact/viewcontactofsdrpage.cxx +++ b/svx/source/sdr/contact/viewcontactofsdrpage.cxx @@ -18,7 +18,6 @@ */ #include <sdr/contact/viewcontactofsdrpage.hxx> -#include <svx/sdr/contact/displayinfo.hxx> #include <svx/sdr/contact/viewobjectcontact.hxx> #include <svx/svdpage.hxx> #include <sdr/contact/viewobjectcontactofsdrpage.hxx> @@ -28,7 +27,6 @@ #include <tools/debug.hxx> #include <vcl/svapp.hxx> #include <svx/sdr/contact/objectcontact.hxx> -#include <svx/sdr/contact/viewobjectcontactofsdrobj.hxx> #include <drawinglayer/primitive2d/backgroundcolorprimitive2d.hxx> #include <drawinglayer/primitive2d/PolygonHairlinePrimitive2D.hxx> #include <drawinglayer/primitive2d/PolyPolygonColorPrimitive2D.hxx> @@ -402,34 +400,11 @@ sal_uInt32 ViewContactOfPageHierarchy::GetObjectCount() const return getPage().GetObjCount(); } -SdrObject& ViewContactOfPageHierarchy::GetSdrObject(sal_uInt32 nIndex) const +ViewContact& ViewContactOfPageHierarchy::GetViewContact(sal_uInt32 nIndex) const { SdrObject* pObj = getPage().GetObj(nIndex); assert(pObj && "ViewContactOfPageHierarchy::GetViewContact: Corrupt SdrObjList (!)"); - return *pObj; -} - -ViewContact& ViewContactOfPageHierarchy::GetViewContact(sal_uInt32 nIndex) const -{ - return GetSdrObject(nIndex).GetViewContact(); -} - -void ViewContactOfPageHierarchy::getPrimitive2DSequenceHierarchyOfIndex( - sal_uInt32 nIndex, DisplayInfo& rDisplayInfo, ObjectContact& rObjectContact, - drawinglayer::primitive2d::Primitive2DDecompositionVisitor& rVisitor) -{ - SdrObject& rSdrObject(GetSdrObject(nIndex)); - - // optimization over parent impl to skip SdrObject::GetViewContent(), etc if the SdrObject isn't - // shown on the target layer. ViewObjectContactOfSdrobject::getPrimitive2DSequenceHierarchy does - // the same check, but after a set of allocations which is expensive in the case of SdrCaptions - // in a calc internal layer where there can be thousands of such objects. - if (!ViewObjectContactOfSdrObj::isObjectVisibleOnAnyLayer(rSdrObject, rDisplayInfo.GetProcessLayers())) - return; - - ViewContact& rViewContact = rSdrObject.GetViewContact(); - const ViewObjectContact& rCandidate(rViewContact.GetViewObjectContact(rObjectContact)); - rCandidate.getPrimitive2DSequenceHierarchy(rDisplayInfo, rVisitor); + return pObj->GetViewContact(); } ViewObjectContact& ViewContactOfGrid::CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact) diff --git a/svx/source/sdr/contact/viewobjectcontactofsdrobj.cxx b/svx/source/sdr/contact/viewobjectcontactofsdrobj.cxx index fc132946883a..4338a6f98fac 100644 --- a/svx/source/sdr/contact/viewobjectcontactofsdrobj.cxx +++ b/svx/source/sdr/contact/viewobjectcontactofsdrobj.cxx @@ -50,14 +50,9 @@ ViewObjectContactOfSdrObj::~ViewObjectContactOfSdrObj() { } -bool ViewObjectContactOfSdrObj::isObjectVisibleOnAnyLayer(const SdrObject& rSdrObject, const SdrLayerIDSet& rLayers) +bool ViewObjectContactOfSdrObj::isPrimitiveVisibleOnAnyLayer(const SdrLayerIDSet& aLayers) const { - return rLayers.IsSet(rSdrObject.GetLayer()); -} - -bool ViewObjectContactOfSdrObj::isPrimitiveVisibleOnAnyLayer(const SdrLayerIDSet& rLayers) const -{ - return ViewObjectContactOfSdrObj::isObjectVisibleOnAnyLayer(getSdrObject(), rLayers); + return aLayers.IsSet(getSdrObject().GetLayer()); } bool ViewObjectContactOfSdrObj::isPrimitiveVisible(const DisplayInfo& rDisplayInfo) const
