+ eDVBFrontend *fe = this;
+ eDVBRegisteredFrontend *regFE = 0;
+ long tmp = m_data[LINKED_PREV_PTR];
+ while ( tmp != -1 )
+ {
+ eDVBRegisteredFrontend *prev = (eDVBRegisteredFrontend *)tmp;
+ fe = prev->m_frontend;
+ tmp = prev->m_frontend->m_data[LINKED_PREV_PTR];
+ if (tmp == -1 && fe != this && !prev->m_inuse) {
+ int state = fe->m_state;
+ if (state != eDVBFrontend::stateIdle && state != stateClosed)
+ {
+ fe->closeFrontend(true);
+ state = fe->m_state;
+ }
+ if (state == eDVBFrontend::stateClosed)
+ {
+ regFE = prev;
+ prev->inc_use();
+ }
+ }
+ }
+