diff options
Diffstat (limited to 'src/syncevo/SyncContext.cpp')
-rw-r--r-- | src/syncevo/SyncContext.cpp | 11 |
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; } |