Ticket #1783: streamdata_leak_fix.2.diff

File streamdata_leak_fix.2.diff, 2.0 KB (added by Janne <janne-mythtv@…>, 19 years ago)
  • libs/libmythtv/dtvsignalmonitor.cpp

    old new void DTVSignalMonitor::SetDVBService(uin  
    222222
    223223void DTVSignalMonitor::SetStreamData(MPEGStreamData *data)
    224224{
    225     if (stream_data)
    226         stream_data->RemoveMPEGListener(this);
    227 
    228225    ATSCStreamData *atsc = GetATSCStreamData();
    229226    DVBStreamData  *dvb  = GetDVBStreamData();
    230227    if (atsc)
    void DTVSignalMonitor::SetStreamData(MPE  
    235232    if (dvb)
    236233        dvb->RemoveDVBMainListener(this);
    237234
     235    if (stream_data)
     236    {
     237        stream_data->RemoveMPEGListener(this);
     238        if (!stream_data->HasMPEGListener())
     239            delete stream_data;
     240    }
     241
    238242    stream_data = data;
    239243    if (!data)
    240244        return;
  • libs/libmythtv/mpeg/mpegstreamdata.cpp

    old new void MPEGStreamData::RemoveMPEGListener(  
    11311131    }
    11321132}
    11331133
     1134bool MPEGStreamData::HasMPEGListener()
     1135{
     1136    QMutexLocker locker(&_listener_lock);
     1137
     1138    if (_mpeg_listeners.size())
     1139        return true;
     1140    return false;
     1141}
     1142
    11341143void MPEGStreamData::AddMPEGSPListener(MPEGSingleProgramStreamListener *val)
    11351144{
    11361145    QMutexLocker locker(&_listener_lock);
  • libs/libmythtv/mpeg/mpegstreamdata.h

    old new class MPEGStreamData : public EITSource  
    157157    // "signals"
    158158    void AddMPEGListener(MPEGStreamListener*);
    159159    void RemoveMPEGListener(MPEGStreamListener*);
     160    bool HasMPEGListener();
    160161    void UpdatePAT(const ProgramAssociationTable*);
    161162    void UpdateCAT(const ConditionalAccessTable*);
    162163    void UpdatePMT(uint program_num, const ProgramMapTable*);