diff options
| author | ghost <andreas.monzner@multimedia-labs.de> | 2009-05-04 15:46:16 +0200 |
|---|---|---|
| committer | ghost <andreas.monzner@multimedia-labs.de> | 2009-05-04 15:46:16 +0200 |
| commit | c7d14c25ec2570fa500bf1075079224473ee5512 (patch) | |
| tree | 966dbd874b76051e8659e40c7e66f8d0e33b3e25 /lib/dvb_ci | |
| parent | be08b778383b2c996e61692cbcd0afe864ea2def (diff) | |
| download | enigma2-c7d14c25ec2570fa500bf1075079224473ee5512.tar.gz enigma2-c7d14c25ec2570fa500bf1075079224473ee5512.zip | |
dvbci.cpp: another small fix
Diffstat (limited to 'lib/dvb_ci')
| -rw-r--r-- | lib/dvb_ci/dvbci.cpp | 49 |
1 files changed, 26 insertions, 23 deletions
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) |
