Sanii switchbot - Memory Leak Fix

  • Konuyu açan Konuyu açan sauber
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 0
  • Gösterim Gösterim 106

sauber

Üye
Üye
Mesaj
106
Çözümler
2
Beğeni
89
Puan
699
Ticaret Puanı
0
Yapalı baya oldu o yüzden %100 case'i hatırlamıyorum ama event devam ederken iptal etmeye çalışıldığı için core crash yaşanıyordu, windows geliştirme ortamında yaşamıştım yanlış hatırlamıyorsam freebsd'de sorun olmayabilir:


new_switchbot.h


Arat:
C++:
Genişlet Daralt Kopyala
void Pause();

Altına Ekle:
C++:
Genişlet Daralt Kopyala
void ClearEvent(); // Clear event pointer (called from event handler)

new_switchbot.cpp

Arat:
C++:
Genişlet Daralt Kopyala
info->pkSwitchbot->SwitchItems();

Altına Ekle:

C++:
Genişlet Daralt Kopyala
    if (!info->pkSwitchbot->HasActiveSlots())
    {
        info->pkSwitchbot->ClearEvent(); // Clear event pointer
        return 0; // Stop event
    }


Arat:

C++:
Genişlet Daralt Kopyala
void CSwitchbot::Pause()
{
    if (m_pkSwitchEvent)
    {
        event_cancel(&m_pkSwitchEvent);
        m_pkSwitchEvent = nullptr;
    }
}

Altına Ekle:

C++:
Genişlet Daralt Kopyala
void CSwitchbot::ClearEvent()
{
    m_pkSwitchEvent = nullptr;
}

Arat:
C++:
Genişlet Daralt Kopyala
info->pkSwitchbot->SwitchItems();

Altına Ekle:

C++:
Genişlet Daralt Kopyala
    if (!info->pkSwitchbot->HasActiveSlots())
    {
        info->pkSwitchbot->ClearEvent(); // Clear event pointer
        return 0; // Stop event
    }

Arat:
C++:
Genişlet Daralt Kopyala
            if (!HasActiveSlots())
            {

İf bloğunu değiştir:
C++:
Genişlet Daralt Kopyala
                memset(&m_table.active, 0, sizeof(m_table.active));
                CSwitchbotManager::Instance().SendSwitchbotUpdate(m_table.player_id);
                return; // Exit early - event will stop when it returns 0


Arat:
C++:
Genişlet Daralt Kopyala
if (stop)

if bloğunu değiştir:
C++:
Genişlet Daralt Kopyala
            if (stop)
            {
                // Don't call Stop() here - we're inside the event handler
                // Just clear active flags and notify player
                memset(&m_table.active, 0, sizeof(m_table.active));

                if (SWITCHBOT_PRICE_TYPE == 1)
                    pkOwner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Switchbot stopped. Out of switchers."));
                else
                    pkOwner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Switchbot stopped. Not enough money."));

                CSwitchbotManager::Instance().SendSwitchbotUpdate(m_table.player_id);
                return;
            }
 
Geri
Üst