From 0220cd109c3df587dde5ad7f11b643a2b1639d4f Mon Sep 17 00:00:00 2001 From: Vlad Khorsun Date: Wed, 5 Jun 2024 21:31:35 +0300 Subject: [PATCH] Fixed bug #8149 : The hung or crash could happen when connection fires TRACE_EVENT_DETACH event and new trace session created concurrently --- src/jrd/trace/TraceManager.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/jrd/trace/TraceManager.cpp b/src/jrd/trace/TraceManager.cpp index 347b5465bf..4ada684197 100644 --- a/src/jrd/trace/TraceManager.cpp +++ b/src/jrd/trace/TraceManager.cpp @@ -188,6 +188,10 @@ void TraceManager::update_sessions() { // scope ConfigStorage* storage = getStorage(); + // don't attach going attachment to the new trace sessions, it allows + // to avoid problems later - when mapping uses this going attachment + const bool noNewSessions = attachment && (attachment->att_purge_tid); + StorageGuard guard(storage); storage->restart(); @@ -199,7 +203,7 @@ void TraceManager::update_sessions() FB_SIZE_T pos; if (trace_sessions.find(session.ses_id, pos)) liveSessions.add(session.ses_id); - else + else if (!noNewSessions) { storage->getSession(session, ConfigStorage::ALL); newSessions.add(FB_NEW_POOL(pool) TraceSession(pool, session));