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()
 {
 }

Reply via email to