dvb: close dvr device on each re-tune

This commit is contained in:
Adam Sutton 2013-01-25 10:47:20 +00:00
parent dc160b9e48
commit 03e9f1179d
3 changed files with 21 additions and 12 deletions

View file

@ -344,6 +344,8 @@ void dvb_adapter_start (th_dvb_adapter_t *tda);
void dvb_adapter_stop (th_dvb_adapter_t *tda);
void dvb_adapter_stop_dvr (th_dvb_adapter_t *tda);
void dvb_adapter_set_displayname(th_dvb_adapter_t *tda, const char *s);
void dvb_adapter_set_enabled(th_dvb_adapter_t *tda, int on);

View file

@ -713,6 +713,22 @@ dvb_adapter_start ( th_dvb_adapter_t *tda )
}
}
void
dvb_adapter_stop_dvr ( th_dvb_adapter_t *tda )
{
/* Stop DVR thread */
if (tda->tda_dvr_pipe.rd != -1) {
tvhlog(LOG_DEBUG, "dvb", "%s stopping thread", tda->tda_rootpath);
int err = tvh_write(tda->tda_dvr_pipe.wr, "", 1);
assert(!err);
pthread_join(tda->tda_dvr_thread, NULL);
close(tda->tda_dvr_pipe.rd);
close(tda->tda_dvr_pipe.wr);
tda->tda_dvr_pipe.rd = -1;
tvhlog(LOG_DEBUG, "dvb", "%s stopped thread", tda->tda_rootpath);
}
}
void
dvb_adapter_stop ( th_dvb_adapter_t *tda )
{
@ -729,18 +745,8 @@ dvb_adapter_stop ( th_dvb_adapter_t *tda )
tda->tda_fe_fd = -1;
}
/* Stop DVR thread */
if (tda->tda_dvr_pipe.rd != -1) {
tvhlog(LOG_DEBUG, "dvb", "%s stopping thread", tda->tda_rootpath);
int err = tvh_write(tda->tda_dvr_pipe.wr, "", 1);
assert(!err);
pthread_join(tda->tda_dvr_thread, NULL);
close(tda->tda_dvr_pipe.rd);
close(tda->tda_dvr_pipe.wr);
tda->tda_dvr_pipe.rd = -1;
tvhlog(LOG_DEBUG, "dvb", "%s stopped thread", tda->tda_rootpath);
}
dvb_adapter_stop_dvr(tda);
dvb_adapter_notify(tda);
}

View file

@ -282,6 +282,7 @@ dvb_fe_stop(th_dvb_mux_instance_t *tdmi, int retune)
}
dvb_table_flush_all(tdmi);
dvb_adapter_stop_dvr(tda);
assert(tdmi->tdmi_scan_queue == NULL);