ucb/source/ucp/webdav-curl/SerfLockStore.cxx |   12 ++++++------
 ucb/source/ucp/webdav-curl/SerfLockStore.hxx |    2 +-
 2 files changed, 7 insertions(+), 7 deletions(-)

New commits:
commit 7ac06bdbf8a2b9fed512ae7817131f26f3744898
Author:     Michael Stahl <michael.st...@allotropia.de>
AuthorDate: Tue Feb 8 11:42:03 2022 +0100
Commit:     Michael Stahl <michael.st...@allotropia.de>
CommitDate: Tue Feb 8 16:02:30 2022 +0100

    ucb: webdav-curl: fix deadlock in SerfLockStore::refreshLocks()
    
    ... and removeLock()
    
    (regression from commit 03c7cd9bbe3d46bb13a5cf1ad72ba0eaf702747e)
    
    Change-Id: I4029a7079c7331a7a00c11e2bec5639086bcc928
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129666
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>
    Reviewed-by: Michael Stahl <michael.st...@allotropia.de>
    Tested-by: Jenkins

diff --git a/ucb/source/ucp/webdav-curl/SerfLockStore.cxx 
b/ucb/source/ucp/webdav-curl/SerfLockStore.cxx
index 000edaaa15ee..005e7c5f10dd 100644
--- a/ucb/source/ucp/webdav-curl/SerfLockStore.cxx
+++ b/ucb/source/ucp/webdav-curl/SerfLockStore.cxx
@@ -191,19 +191,19 @@ void SerfLockStore::removeLock(const OUString& rURI)
 {
     std::unique_lock aGuard( m_aMutex );
 
-    removeLockImpl(rURI);
+    removeLockImpl(aGuard, rURI);
 }
 
-void SerfLockStore::removeLockImpl(const OUString& rURI)
+void SerfLockStore::removeLockImpl(std::unique_lock<std::mutex> & rGuard, 
const OUString& rURI)
 {
     assert(rURI.startsWith("http://";) || rURI.startsWith("https://";));
 
-    std::unique_lock aGuard( m_aMutex );
-
     m_aLockInfoMap.erase(rURI);
 
     if ( m_aLockInfoMap.empty() )
-        stopTicker(aGuard);
+    {
+        stopTicker(rGuard);
+    }
 }
 
 void SerfLockStore::refreshLocks()
@@ -249,7 +249,7 @@ void SerfLockStore::refreshLocks()
 
     for (auto const& rLock : authFailedLocks)
     {
-        removeLockImpl(rLock);
+        removeLockImpl(aGuard, rLock);
     }
 }
 
diff --git a/ucb/source/ucp/webdav-curl/SerfLockStore.hxx 
b/ucb/source/ucp/webdav-curl/SerfLockStore.hxx
index 8ae9c0786af5..6765c7990b12 100644
--- a/ucb/source/ucp/webdav-curl/SerfLockStore.hxx
+++ b/ucb/source/ucp/webdav-curl/SerfLockStore.hxx
@@ -81,7 +81,7 @@ public:
     void refreshLocks();
 
 private:
-    void removeLockImpl(const OUString& rURI);
+    void removeLockImpl(std::unique_lock<std::mutex> & rGuard, const OUString& 
rURI);
     void startTicker();
     void stopTicker(std::unique_lock<std::mutex> & rGuard);
 };

Reply via email to