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); };