X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fdvb_ci%2Fdvbci.cpp;h=bde394aa3111b13ef055e91e128419572eef616d;hp=0a32b8f2b18e488ccb0f3a4e2890ed7e560cf248;hb=69ad5b69a69b3a9006824832afb3fa8cecb061b9;hpb=c8bba1502bb3809d55fade29a0a9566875aa8745 diff --git a/lib/dvb_ci/dvbci.cpp b/lib/dvb_ci/dvbci.cpp index 0a32b8f..bde394a 100644 --- a/lib/dvb_ci/dvbci.cpp +++ b/lib/dvb_ci/dvbci.cpp @@ -552,6 +552,7 @@ void eDVBCIInterfaces::removePMTHandler(eDVBServicePMTHandler *pmthandler) if (it != m_pmt_handlers.end()) { eDVBCISlot *slot = it->cislot; + eDVBCISlot *base_slot = slot; eDVBServicePMTHandler *pmthandler = it->pmthandler; m_pmt_handlers.erase(it); @@ -575,20 +576,17 @@ void eDVBCIInterfaces::removePMTHandler(eDVBServicePMTHandler *pmthandler) while(slot) { + eDVBCISlot *next = slot->linked_next; if (!sameServiceExist) { -// if (slot->getNumOfServices() > 1) - { - eDebug("[eDVBCIInterfaces] remove last pmt handler for service %s send empty capmt", - service_to_remove.toString().c_str()); - std::vector caids; - caids.push_back(0xFFFF); - slot->sendCAPMT(pmthandler, caids); // send a capmt without caids to remove a running service - } + eDebug("[eDVBCIInterfaces] remove last pmt handler for service %s send empty capmt", + service_to_remove.toString().c_str()); + std::vector caids; + caids.push_back(0xFFFF); + slot->sendCAPMT(pmthandler, caids); // send a capmt without caids to remove a running service slot->removeService(service_to_remove.getServiceID().get()); } - eDVBCISlot *next = slot->linked_next; if (!--slot->use_count) { if (slot->linked_next) @@ -596,9 +594,7 @@ void eDVBCIInterfaces::removePMTHandler(eDVBServicePMTHandler *pmthandler) else setInputSource(slot->current_tuner, slot->current_source); - if (it->cislot == slot) // remove the base slot - it->cislot = slot->linked_next; - else + if (base_slot != slot) { eDVBCISlot *tmp = it->cislot; while(tmp->linked_next != slot) @@ -609,6 +605,8 @@ void eDVBCIInterfaces::removePMTHandler(eDVBServicePMTHandler *pmthandler) else tmp->linked_next = 0; } + else // removed old base slot.. update ptr + base_slot = slot->linked_next; slot->linked_next = 0; slot->user_mapped = false; }