- eDebug("[eDVBCAService] free slot %d demux %d for service %s", iter, caservice->m_used_demux[iter], caservice->m_service.toString().c_str() );
- caservice->m_used_demux[iter] = 0xFF;
- freed=true;
+ if ( !freed && caservice->m_used_demux[iter] == demux_nums[i] )
+ {
+ eDebug("[eDVBCAService] free slot %d demux %d for service %s", iter, caservice->m_used_demux[iter], caservice->m_service.toString().c_str() );
+ caservice->m_used_demux[iter] = 0xFF;
+ freed=true;
+ }
+ else
+ ++used_demux_slots;
+ }
+ ++iter;
+ }
+ if (!freed)
+ eDebug("[eDVBCAService] couldn't free demux slot for demux %d", demux_nums[i]);
+ if (i || loops == 1)
+ {
+ if (!used_demux_slots) // no more used.. so we remove it
+ {
+ delete it->second;
+ exist.erase(it);