Loading src/session.cpp +13 −22 Changes for src/session.cpp: 13 added lines, 22 removed lines. Original line number Diff line number Diff line Loading @@ -27,7 +27,6 @@ #include <iostream> #include <mutex> #include <set> #include "session.h" #include "authdb.h" Loading Loading @@ -606,32 +605,12 @@ void authdb::ClusterSession::relSession(AuthBackend &backend,uuid::uuid sessioni void authdb::ClusterSession::listSessions(std::vector<SessionInfo> &out){ out.clear(); std::set<std::string> seen_sids; // Local sessions { std::lock_guard<std::mutex> guard(_lock); cleanupExpired(); for(SessionData *cur=_firstData; cur; cur=cur->_next){ SessionInfo info; cur->getSid(info.sid); cur->getUid(info.uid); cur->getDid(info.did); info.username = cur->getUsername(); seen_sids.insert(std::string(info.sid.c_str())); out.push_back(std::move(info)); } } // Cluster sessions // Use cluster store as single source of truth if (g_Cluster && g_Cluster->isRunning()) { std::vector<Cluster::SessionInfo> csessions; g_Cluster->listAllSessions(csessions); for (const auto &cs : csessions) { std::string sidstr = cs.sid.c_str(); if (seen_sids.count(sidstr)) continue; seen_sids.insert(sidstr); SessionInfo info; info.sid = cs.sid; info.uid = cs.uid; Loading @@ -639,5 +618,17 @@ void authdb::ClusterSession::listSessions(std::vector<SessionInfo> &out){ info.username = cs.username; out.push_back(std::move(info)); } } else { // Fallback: local sessions only std::lock_guard<std::mutex> guard(_lock); cleanupExpired(); for(SessionData *cur=_firstData; cur; cur=cur->_next){ SessionInfo info; cur->getSid(info.sid); cur->getUid(info.uid); cur->getDid(info.did); info.username = cur->getUsername(); out.push_back(std::move(info)); } } } Loading
src/session.cpp +13 −22 Changes for src/session.cpp: 13 added lines, 22 removed lines. Original line number Diff line number Diff line Loading @@ -27,7 +27,6 @@ #include <iostream> #include <mutex> #include <set> #include "session.h" #include "authdb.h" Loading Loading @@ -606,32 +605,12 @@ void authdb::ClusterSession::relSession(AuthBackend &backend,uuid::uuid sessioni void authdb::ClusterSession::listSessions(std::vector<SessionInfo> &out){ out.clear(); std::set<std::string> seen_sids; // Local sessions { std::lock_guard<std::mutex> guard(_lock); cleanupExpired(); for(SessionData *cur=_firstData; cur; cur=cur->_next){ SessionInfo info; cur->getSid(info.sid); cur->getUid(info.uid); cur->getDid(info.did); info.username = cur->getUsername(); seen_sids.insert(std::string(info.sid.c_str())); out.push_back(std::move(info)); } } // Cluster sessions // Use cluster store as single source of truth if (g_Cluster && g_Cluster->isRunning()) { std::vector<Cluster::SessionInfo> csessions; g_Cluster->listAllSessions(csessions); for (const auto &cs : csessions) { std::string sidstr = cs.sid.c_str(); if (seen_sids.count(sidstr)) continue; seen_sids.insert(sidstr); SessionInfo info; info.sid = cs.sid; info.uid = cs.uid; Loading @@ -639,5 +618,17 @@ void authdb::ClusterSession::listSessions(std::vector<SessionInfo> &out){ info.username = cs.username; out.push_back(std::move(info)); } } else { // Fallback: local sessions only std::lock_guard<std::mutex> guard(_lock); cleanupExpired(); for(SessionData *cur=_firstData; cur; cur=cur->_next){ SessionInfo info; cur->getSid(info.sid); cur->getUid(info.uid); cur->getDid(info.did); info.username = cur->getUsername(); out.push_back(std::move(info)); } } }