Administrator
Administrator
  • Mesaje: 4795
    Membru din: 07 Aug 2024, 21:53
  • Reacții: 115427
  • Mesaje utile: 46
  • Status: Pe aici.. 🤠
    Server: Saga2 - Soon
  • Regat: Jinno
  • [ID Discord]
  • Contact:
    *Descriere:

    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>
    Adauga dedesubt:

    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Cauta functia:
    Code:
    void CClientManager::DeleteLoginData(CLoginData * pkLD)
    Dupa aceasta functie adauga functiile pentru gestionarea perioadei de expirare a datelor de login:

    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    In aceeasi functie CClientManager::RemovePeer, cauta zona unde contul este eliminat din m_map_kLogonAccount si unde este verificat:
    Code:
    if (pkLD->IsDeleted())
    Asigura-te ca iteratorul este sters din m_map_kLogonAccount inainte de verificare, iar daca obiectul nu este deja marcat ca sters, porneste perioada de expirare:

    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Cauta functia:
    Code:
    int CClientManager::Process()
    Cauta:
    Code:
    UpdateLogoutPlayer();
    Adauga dedesubt:

    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.



    Deschide Server/db/src/ClientManager.h si cauta:
    Code:
    void InsertLoginData(CLoginData * pkLD);
    void DeleteLoginData(CLoginData * pkLD);
    Adauga dedesubt:

    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.



    Deschide Server/db/src/ClientManagerLogin.cpp si cauta functia:
    Code:
    bool CClientManager::InsertLogonAccount(const char * c_pszLogin, DWORD dwHandle, const char * c_pszIP)
    Dupa verificarea:
    Code:
    if (!pkLD)
    	return false;
    Adauga:

    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    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)
    Cauta:
    Code:
    if (pkLD->IsDeleted())
    Modifica zona astfel incat obiectele deja marcate pentru stergere sa fie eliberate, iar celelalte sa intre in perioada de expirare:

    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.



    Deschide Server/db/src/LoginData.cpp si cauta:
    Code:
    bool CLoginData::IsDeleted()
    Dupa functia respectiva adauga:

    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.



    Deschide Server/db/src/LoginData.h si cauta:
    Code:
    void SetDeleted(bool bSet);
    bool IsDeleted();
    Adauga dedesubt:

    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Cauta:
    Code:
    bool m_bDeleted;
    Adauga dedesubt:

    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.

    Nou Cum descarc de pe TeraBox?

    Afișează detalii Ascunde detalii
    • Este asemănător cu Mega.nz
    • Instalați-vă clientul lor de Download de aici
    • Faceți-vă un cont (vă puteți loga cu Facebook / Google / etc)
    • Nou Dacă nu vreți să descărcați clientul de Download, folosiți acest site
    • Gata! Acum puteți descărca resursele rapid & simplu.

    De ce folosim TeraBox?

    • Este gratuit
    • Primești 1TB de spațiu gratuit la orice cont creat!
    • Este ușor de folosit și varianta premium este foarte ieftină
    • Fișierele nu sunt șterse niciodată
    TeraBox logo
    Comunitatea Metin2 Romania este si pe Discord! :ymcowboy:

    2500+ membri • Chat activ zilnic • Support • Cereri & Resurse

    ► discord.gg/jWxeDSf7HP ◄





    See full signature

    Creează-ți un cont sau autentifică-te pentru a participa la discuție

    Trebuie să fii membru pentru a răspunde

    Creează-ți un cont

    Membrii pot crea subiecte noi și pot descărca resurse Metin2 Gratuit!


    Te poți înregistra sau conecta rapid utilizând contul tău de Discord, Github sau Google.

    Înregistrare

    Autentifică-te

    Înapoi la “FIX-uri”

    Informații

    Utilizatori ce navighează pe acest forum: g34sslol, marcos_impacto, proximity_gg și 1 vizitator

    Discord ID copiat: