fix segfault on fast zapping (faster then a pmt is received)
[enigma2.git] / lib / dvb / pmt.cpp
index 16f93681a62dbe5a08dd6352d4abe0cb73eb76a1..5301df9b9970db3356dbad5be460cb0495232d61 100644 (file)
@@ -449,7 +449,8 @@ int eDVBServicePMTHandler::tune(eServiceReferenceDVB &ref, int use_decode_demux,
                ref.getChannelID(chid);
                res = m_resourceManager->allocateChannel(chid, m_channel);
                eDebug("allocate Channel: res %d", res);
-               eDVBCIInterfaces::getInstance()->addPMTHandler(this);
+               if (!res)
+                       eDVBCIInterfaces::getInstance()->addPMTHandler(this);
        } else
        {
                eDVBMetaParser parser;
@@ -537,10 +538,12 @@ void eDVBServicePMTHandler::free()
                ePtr<eTable<ProgramMapSection> > ptr;
                m_PMT.getCurrent(ptr);
                eDVBCAService::unregister_service(m_reference, demuxes, ptr);
-               eDVBCIInterfaces::getInstance()->removePMTHandler(this);
                m_ca_servicePtr = 0;
        }
 
+       if (m_channel)
+               eDVBCIInterfaces::getInstance()->removePMTHandler(this);
+
        if (m_pvr_channel)
        {
                m_pvr_channel->stopFile();