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()

Reply via email to