diff options
author | Michael Stahl <michael.stahl@allotropia.de> | 2022-02-08 11:42:03 +0100 |
---|---|---|
committer | Michael Stahl <michael.stahl@allotropia.de> | 2022-02-08 16:02:30 +0100 |
commit | 7ac06bdbf8a2b9fed512ae7817131f26f3744898 (patch) | |
tree | 2032c0dec628eaf1728ad1ccf758404eba763462 /ucb | |
parent | 3671d16e4a03351b235fef6b5ad885fad158066e (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.cxx | 12 | ||||
-rw-r--r-- | ucb/source/ucp/webdav-curl/SerfLockStore.hxx | 2 |
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); }; |