summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ucb/source/ucp/webdav-neon/NeonLockStore.cxx17
1 files changed, 12 insertions, 5 deletions
diff --git a/ucb/source/ucp/webdav-neon/NeonLockStore.cxx b/ucb/source/ucp/webdav-neon/NeonLockStore.cxx
index 77e62589f26f..c4d853332655 100644
--- a/ucb/source/ucp/webdav-neon/NeonLockStore.cxx
+++ b/ucb/source/ucp/webdav-neon/NeonLockStore.cxx
@@ -133,14 +133,21 @@ void NeonLockStore::startTicker()
// -------------------------------------------------------------------
void NeonLockStore::stopTicker()
{
- osl::MutexGuard aGuard( m_aMutex );
-
- if ( m_pTickerThread.is() )
+ rtl::Reference<TickerThread> pTickerThread;
{
- m_pTickerThread->finish();
- m_pTickerThread->join();
+ osl::MutexGuard aGuard( m_aMutex );
+
+ if (!m_pTickerThread.is())
+ {
+ return; // nothing to do
+ }
+ m_pTickerThread->finish(); // needs mutex
+ // the TickerThread may run refreshLocks() at most once after this
+ pTickerThread = m_pTickerThread;
m_pTickerThread.clear();
}
+
+ pTickerThread->join(); // without m_aMutex locked (to prevent deadlock)
}
// -------------------------------------------------------------------