Files
ThordekkCore/crash_monitoring.cpp
T
2026-01-20 21:28:45 -03:00

50 lines
1.8 KiB
C++

// Runtime monitoring code to validate memory safety fixes
// Add this to BotWorldSessionMgr.h as private members:
class BotWorldSessionMgr {
private:
// Memory corruption detection
std::atomic<uint32> _sessionAccessCount{0};
std::atomic<uint32> _invalidCastDetected{0};
std::atomic<uint32> _nullPointerPrevented{0};
public:
void ValidateSessionIntegrity() const {
std::lock_guard<std::mutex> lock(_sessionsMutex);
for (auto const& [guid, session] : _botSessions) {
if (!session) {
TC_LOG_FATAL("module.playerbot.session",
"CRITICAL: Null session in _botSessions map for {}",
guid.ToString());
std::abort();
}
// Validate session is actually a BotSession
BotSession* botSession = dynamic_cast<BotSession*>(session);
if (!botSession) {
TC_LOG_FATAL("module.playerbot.session",
"CRITICAL: Invalid session type in _botSessions for {}",
guid.ToString());
std::abort();
}
// Validate session memory isn't corrupted
if (session->GetAccountId() == 0) {
TC_LOG_FATAL("module.playerbot.session",
"CRITICAL: Session with zero account ID for {}",
guid.ToString());
std::abort();
}
}
}
void LogMemoryStats() const {
TC_LOG_INFO("module.playerbot.session",
"Memory Safety Stats - Access Count: {}, Invalid Casts: {}, Null Pointers Prevented: {}",
_sessionAccessCount.load(), _invalidCastDetected.load(), _nullPointerPrevented.load());
}
};
// Call ValidateSessionIntegrity() periodically in Update()
// Call LogMemoryStats() every 10 minutes to monitor safety