Metin2 DB CLoginData Memory Leak Fix – Login/Logout
Acest fix rezolvă un memory leak din procesul DB al Metin2, provocat de obiectele CLoginData care pot rămâne în memorie după logout-ul unui jucător sau după deconectarea/restartarea unui game core.
Problema apare deoarece obiectele nu sunt întotdeauna marcate pentru ștergere pe fluxul normal de logout. Modificarea introduce o perioadă de siguranță înainte de eliberarea datelor, permițând în același timp reconectarea jucătorului fără a crea probleme în flow-ul de login.
- rezolvă memory leak-ul CLoginData;
- curăță datele rămase după logout;
- gestionează corect conturile după deconectarea unui game peer;
- introduce un grace period înainte de ștergere;
- anulează ștergerea dacă jucătorul se reconectează.
*Link download / Code:
Deschide Server/db/src/ClientManager.cpp si cauta:
Code:
#include <fmt/fmt.h>Cauta functia:
Code:
void CClientManager::DeleteLoginData(CLoginData * pkLD)In aceeasi functie CClientManager::RemovePeer, cauta zona unde contul este eliminat din m_map_kLogonAccount si unde este verificat:
Code:
if (pkLD->IsDeleted())Cauta functia:
Code:
int CClientManager::Process()Code:
UpdateLogoutPlayer();Deschide Server/db/src/ClientManager.h si cauta:
Code:
void InsertLoginData(CLoginData * pkLD);
void DeleteLoginData(CLoginData * pkLD);Deschide Server/db/src/ClientManagerLogin.cpp si cauta functia:
Code:
bool CClientManager::InsertLogonAccount(const char * c_pszLogin, DWORD dwHandle, const char * c_pszIP)Code:
if (!pkLD)
return false;In aceeasi functie, codul va continua normal cu:
Code:
pkLD->SetConnectedPeerHandle(dwHandle);
pkLD->SetIP(c_pszIP);Cauta functia:
Code:
bool CClientManager::DeleteLogonAccount(const char * c_pszLogin, DWORD dwHandle)Code:
if (pkLD->IsDeleted())Deschide Server/db/src/LoginData.cpp si cauta:
Code:
bool CLoginData::IsDeleted()Deschide Server/db/src/LoginData.h si cauta:
Code:
void SetDeleted(bool bSet);
bool IsDeleted();Cauta:
Code:
bool m_bDeleted;

la acest mesaj și conținutul se va afișa automat.
