configmgr/source/configurationprovider.cxx |    8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

New commits:
commit 12c00caa3d017116ba29801578f1bd42b111824a
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Thu Feb 23 09:39:35 2023 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Thu Feb 23 12:13:42 2023 +0000

    unlock during dispose in configmgr::configuration_provider::Service
    
    Since the code that can run during flushModifications might manage to
    call back into Service..
    
    regression from
        commit a61951a3a21c6457334f78f657806c1167dbf339
        Author: Noel Grandin <noel.gran...@collabora.co.uk>
        Date:   Mon Feb 20 20:08:30 2023 +0200
        BaseMutex->std::mutex in configmgr::configuration_provider::Service
    
    Change-Id: I0070e7589cdea38905de6c68adefd8081b122152
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/147500
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/configmgr/source/configurationprovider.cxx 
b/configmgr/source/configurationprovider.cxx
index 215cad7f6f14..a99309397e37 100644
--- a/configmgr/source/configurationprovider.cxx
+++ b/configmgr/source/configurationprovider.cxx
@@ -106,7 +106,7 @@ private:
 
     virtual ~Service() override {}
 
-    virtual void disposing(std::unique_lock<std::mutex>& /*rGuard*/) override 
{ flushModifications(); }
+    virtual void disposing(std::unique_lock<std::mutex>& rGuard) override;
 
     virtual OUString SAL_CALL getImplementationName() override
     {
@@ -330,6 +330,12 @@ css::lang::Locale Service::getLocale() {
     return loc;
 }
 
+void Service::disposing(std::unique_lock<std::mutex>& rGuard) {
+    rGuard.unlock(); // just in case we call back into Service during dispose()
+    flushModifications();
+    rGuard.lock();
+}
+
 void Service::flushModifications() const {
     Components * components;
     {

Reply via email to