summaryrefslogtreecommitdiff
path: root/src/syncevo/SyncContext.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/syncevo/SyncContext.cpp')
-rw-r--r--src/syncevo/SyncContext.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/syncevo/SyncContext.cpp b/src/syncevo/SyncContext.cpp
index 9ceb2c6c..2f335824 100644
--- a/src/syncevo/SyncContext.cpp
+++ b/src/syncevo/SyncContext.cpp
@@ -3666,7 +3666,7 @@ SyncMLStatus SyncContext::doSync()
sysync::STEPCMD_CLIENTSTART;
SharedSession session = m_engine.OpenSession(m_sessionID);
SharedBuffer sendBuffer;
- SessionSentinel sessionSentinel(*this, session);
+ std::auto_ptr<SessionSentinel> sessionSentinel(new SessionSentinel(*this, session));
if (m_serverMode && !m_localSync) {
m_engine.WriteSyncMLBuffer(session,
@@ -4095,6 +4095,15 @@ SyncMLStatus SyncContext::doSync()
}
}
+ // Let session shut down before auto-destructing anything else
+ // (like our signal blocker). This may take a while, because it
+ // may involve shutting down the helper background thread which
+ // opened our local datastore.
+ SE_LOG_DEBUG(NULL, "closing session");
+ sessionSentinel.reset();
+ session.reset();
+ SE_LOG_DEBUG(NULL, "session closed");
+
return status;
}