diff --git a/src/dvb/dvb.h b/src/dvb/dvb.h index 50ce547a..468b9271 100644 --- a/src/dvb/dvb.h +++ b/src/dvb/dvb.h @@ -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); diff --git a/src/dvb/dvb_adapter.c b/src/dvb/dvb_adapter.c index ac85b454..680c96a6 100644 --- a/src/dvb/dvb_adapter.c +++ b/src/dvb/dvb_adapter.c @@ -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); } diff --git a/src/dvb/dvb_fe.c b/src/dvb/dvb_fe.c index a4e58089..0f27b898 100644 --- a/src/dvb/dvb_fe.c +++ b/src/dvb/dvb_fe.c @@ -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);