editeng/source/accessibility/AccessibleContextBase.cxx | 2 +- include/unotools/accessiblerelationsethelper.hxx | 6 ++++-- unotools/source/accessibility/accessiblerelationsethelper.cxx | 6 ++++++ 3 files changed, 11 insertions(+), 3 deletions(-)
New commits: commit 683c005c2c3b9909f7eae18f06a1142b23978bc4 Author: Caolán McNamara <[email protected]> AuthorDate: Sun Oct 6 15:22:06 2024 +0100 Commit: Caolán McNamara <[email protected]> CommitDate: Thu Oct 10 17:33:35 2024 +0200 cid#1557590 Data race condition Change-Id: I1c100c65eb2671802550db5629b994ebeb92580b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/174684 Tested-by: Jenkins Reviewed-by: Caolán McNamara <[email protected]> diff --git a/editeng/source/accessibility/AccessibleContextBase.cxx b/editeng/source/accessibility/AccessibleContextBase.cxx index be0010d01ecb..8f2fbf6d4045 100644 --- a/editeng/source/accessibility/AccessibleContextBase.cxx +++ b/editeng/source/accessibility/AccessibleContextBase.cxx @@ -270,7 +270,7 @@ uno::Reference<XAccessibleRelationSet> SAL_CALL // Create a copy of the relation set and return it. if (mxRelationSet) { - return new ::utl::AccessibleRelationSetHelper(*mxRelationSet); + return mxRelationSet->Clone(); } else return uno::Reference<XAccessibleRelationSet>(nullptr); diff --git a/include/unotools/accessiblerelationsethelper.hxx b/include/unotools/accessiblerelationsethelper.hxx index 35277ae5bd5f..d5adf957e4ef 100644 --- a/include/unotools/accessiblerelationsethelper.hxx +++ b/include/unotools/accessiblerelationsethelper.hxx @@ -42,9 +42,11 @@ class UNOTOOLS_DLLPUBLIC AccessibleRelationSetHelper final public: //===== internal ======================================================== AccessibleRelationSetHelper(); - AccessibleRelationSetHelper(const AccessibleRelationSetHelper& rHelper); + + css::uno::Reference<css::accessibility::XAccessibleRelationSet> Clone() const; private: + AccessibleRelationSetHelper(const AccessibleRelationSetHelper& rHelper); virtual ~AccessibleRelationSetHelper() override; public: @@ -115,7 +117,7 @@ public: private: /// Mutex guarding this object. - std::mutex maMutex; + mutable std::mutex maMutex; /// The implementation of this helper interface. std::vector<css::accessibility::AccessibleRelation> maRelations; }; diff --git a/unotools/source/accessibility/accessiblerelationsethelper.cxx b/unotools/source/accessibility/accessiblerelationsethelper.cxx index 323b12c53506..3bd58454462f 100644 --- a/unotools/source/accessibility/accessiblerelationsethelper.cxx +++ b/unotools/source/accessibility/accessiblerelationsethelper.cxx @@ -52,6 +52,12 @@ AccessibleRelationSetHelper::AccessibleRelationSetHelper (const AccessibleRelati { } +css::uno::Reference<css::accessibility::XAccessibleRelationSet> AccessibleRelationSetHelper::Clone() const +{ + std::scoped_lock aGuard (maMutex); + return new AccessibleRelationSetHelper(*this); +} + AccessibleRelationSetHelper::~AccessibleRelationSetHelper() { }
