From: ghost Date: Mon, 4 May 2009 13:46:16 +0000 (+0200) Subject: dvbci.cpp: another small fix X-Git-Tag: 2.6.0~320^2~12 X-Git-Url: https://git.cweiske.de/enigma2.git/commitdiff_plain/c7d14c25ec2570fa500bf1075079224473ee5512 dvbci.cpp: another small fix --- diff --git a/lib/dvb_ci/dvbci.cpp b/lib/dvb_ci/dvbci.cpp index 64b029d4..9583db55 100644 --- a/lib/dvb_ci/dvbci.cpp +++ b/lib/dvb_ci/dvbci.cpp @@ -200,36 +200,39 @@ int eDVBCIInterfaces::cancelEnq(int slotid) void eDVBCIInterfaces::ciRemoved(eDVBCISlot *slot) { - eDebug("CI Slot %d: removed... usecount %d", slot->getSlotID(), slot->use_count); - for (PMTHandlerList::iterator it(m_pmt_handlers.begin()); - it != m_pmt_handlers.end(); ++it) + if (slot->use_count) { - if (it->cislot == slot) // remove the base slot - it->cislot = slot->linked_next; - else if (it->cislot) + eDebug("CI Slot %d: removed... usecount %d", slot->getSlotID(), slot->use_count); + for (PMTHandlerList::iterator it(m_pmt_handlers.begin()); + it != m_pmt_handlers.end(); ++it) { - eDVBCISlot *prevSlot = it->cislot, *hSlot = it->cislot->linked_next; - while (hSlot) + if (it->cislot == slot) // remove the base slot + it->cislot = slot->linked_next; + else if (it->cislot) { - if (hSlot == slot) { - prevSlot->linked_next = slot->linked_next; - break; + eDVBCISlot *prevSlot = it->cislot, *hSlot = it->cislot->linked_next; + while (hSlot) + { + if (hSlot == slot) { + prevSlot->linked_next = slot->linked_next; + break; + } + prevSlot = hSlot; + hSlot = hSlot->linked_next; } - prevSlot = hSlot; - hSlot = hSlot->linked_next; } } + if (slot->linked_next) + slot->linked_next->setSource(slot->current_source); + else // last CI in chain + setInputSource(slot->current_tuner, slot->current_source); + slot->linked_next = 0; + slot->use_count=0; + slot->plugged=true; + slot->user_mapped=false; + slot->removeService(0xFFFF); + recheckPMTHandlers(); } - if (slot->linked_next) - slot->linked_next->setSource(slot->current_source); - else // last CI in chain - setInputSource(slot->current_tuner, slot->current_source); - slot->linked_next = 0; - slot->use_count=0; - slot->plugged=true; - slot->user_mapped=false; - slot->removeService(0xFFFF); - recheckPMTHandlers(); } static bool canDescrambleMultipleServices(int slotid)