ucb/source/ucp/webdav-curl/SerfLockStore.cxx | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)
New commits: commit 917e73ac2372b341dfde32eea64875df46e6fded Author: Caolán McNamara <[email protected]> AuthorDate: Tue Nov 4 12:32:40 2025 +0000 Commit: Xisco Fauli <[email protected]> CommitDate: Tue Nov 4 18:04:19 2025 +0100 tdf#168672 Closing webdav documents is extremly slow Change-Id: I9b6c1cbd7ca4c1a8bcce589cbfda5604e66520f3 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/193404 Reviewed-by: Xisco Fauli <[email protected]> Tested-by: Jenkins diff --git a/ucb/source/ucp/webdav-curl/SerfLockStore.cxx b/ucb/source/ucp/webdav-curl/SerfLockStore.cxx index c367f1445c54..668238ca90b8 100644 --- a/ucb/source/ucp/webdav-curl/SerfLockStore.cxx +++ b/ucb/source/ucp/webdav-curl/SerfLockStore.cxx @@ -46,7 +46,11 @@ public: : Thread( "WebDavTickerThread" ), m_bFinish( false ), m_rLockStore( rLockStore ) {} - void finish() { m_bFinish = true; } + void finish() + { + m_bFinish = true; + m_rLockStore.m_aCondition.notify_all(); // Wake up the TickerThread + } private: commit ada7b49a5ab88711b5e2296ebc753fe042e53111 Author: Caolán McNamara <[email protected]> AuthorDate: Thu Aug 7 11:41:04 2025 +0100 Commit: Xisco Fauli <[email protected]> CommitDate: Tue Nov 4 18:04:12 2025 +0100 Related: tdf#168672 ; cid#1642989 Wait without held lock restore the lock at the end of SerfLockStore::stopTicker SerfLockStore::removeLockImpl calls this, and that is called by SerfLockStore::refreshLocks in a loop, so if it was unlocked at the end of the first loop, then its still unlocked on a 2nd loop. Probably doesn't matter as there's only a 2nd unlock attempt if m_aLockInfoMap.empty() which presumably can only happen once. Change-Id: Iede91b1b4ef9368bcf4e62cb85bf5a0c745e0ba7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/189058 Reviewed-by: Caolán McNamara <[email protected]> Tested-by: Jenkins (cherry picked from commit 3f3aed00458d64bf32f5faa25c88f959430dea3a) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/193403 Reviewed-by: Xisco Fauli <[email protected]> diff --git a/ucb/source/ucp/webdav-curl/SerfLockStore.cxx b/ucb/source/ucp/webdav-curl/SerfLockStore.cxx index c12bdfedf6de..c367f1445c54 100644 --- a/ucb/source/ucp/webdav-curl/SerfLockStore.cxx +++ b/ucb/source/ucp/webdav-curl/SerfLockStore.cxx @@ -93,7 +93,7 @@ SerfLockStore::~SerfLockStore() { std::unique_lock aGuard(m_aMutex); stopTicker(aGuard); - aGuard.lock(); // actually no threads should even try to access members now + assert(aGuard.owns_lock()); // actually no threads should even try to access members now // release active locks, if any. SAL_WARN_IF( !m_aLockInfoMap.empty(), "ucb.ucp.webdav", @@ -133,6 +133,8 @@ void SerfLockStore::stopTicker(std::unique_lock<std::mutex> & rGuard) { pTickerThread->join(); // without m_aMutex locked (to prevent deadlock) } + + rGuard.lock(); } bool SerfLockStore::joinThreads()
