Skip to content

Commit 4556e74

Browse files
committed
destroy stale sessions without a lock
1 parent fc0e372 commit 4556e74

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

src/Interpreters/Session.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -226,14 +226,18 @@ class NamedSessionsStorage
226226
std::unique_lock lock{mutex};
227227
while (!quit)
228228
{
229-
closeSessions(lock);
229+
auto closed_sessions = closeSessions(lock);
230+
lock.unlock();
231+
closed_sessions.clear();
232+
lock.lock();
230233
if (cond.wait_for(lock, close_interval, [this]() -> bool { return quit; }))
231234
break;
232235
}
233236
}
234237

235-
void closeSessions(std::unique_lock<std::mutex> & lock)
238+
std::vector<std::shared_ptr<NamedSessionData>> closeSessions(std::unique_lock<std::mutex> & lock)
236239
{
240+
std::vector<std::shared_ptr<NamedSessionData>> closed_sessions;
237241
const auto now = std::chrono::steady_clock::now();
238242

239243
for (auto bucket_it = close_time_buckets.begin(); bucket_it != close_time_buckets.end(); bucket_it = close_time_buckets.erase(bucket_it))
@@ -270,9 +274,12 @@ class NamedSessionsStorage
270274
}
271275

272276
LOG_TRACE(log, "Close session with session_id: {}, user_id: {}", key.second, toString(key.first));
277+
closed_sessions.push_back(session);
273278
sessions.erase(session_it);
274279
}
275280
}
281+
282+
return closed_sessions;
276283
}
277284

278285
std::mutex mutex;

0 commit comments

Comments
 (0)