summaryrefslogtreecommitdiff
path: root/ucb
diff options
context:
space:
mode:
authorMichael Stahl <michael.stahl@allotropia.de>2022-02-08 11:42:03 +0100
committerMichael Stahl <michael.stahl@allotropia.de>2022-02-08 16:02:30 +0100
commit7ac06bdbf8a2b9fed512ae7817131f26f3744898 (patch)
tree2032c0dec628eaf1728ad1ccf758404eba763462 /ucb
parent3671d16e4a03351b235fef6b5ad885fad158066e (diff)
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.grandin@collabora.co.uk> Reviewed-by: Michael Stahl <michael.stahl@allotropia.de> Tested-by: Jenkins
Diffstat (limited to 'ucb')
-rw-r--r--ucb/source/ucp/webdav-curl/SerfLockStore.cxx12
-rw-r--r--ucb/source/ucp/webdav-curl/SerfLockStore.hxx2
2 files changed, 7 insertions, 7 deletions
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);
};