]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
dvb: close dvr device on each re-tune
authorAdam Sutton <dev@adamsutton.me.uk>
Fri, 25 Jan 2013 10:47:20 +0000 (10:47 +0000)
committerAdam Sutton <dev@adamsutton.me.uk>
Fri, 1 Feb 2013 21:02:03 +0000 (21:02 +0000)
src/dvb/dvb.h
src/dvb/dvb_adapter.c
src/dvb/dvb_fe.c

index 50ce547a75204465834cae2f2a6028a07f31b3fb..468b927184236bb61d6e3e20e6906a5d1050b72f 100644 (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);
index ac85b454897525e649d3f617315dd4fe8faada89..680c96a68b7635311af68db3d4a4a22a30300425 100644 (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);
 }
 
index a4e580899473e6f6f6bb0f56226be7c5a7f312a5..0f27b898a5de9360bc21e01081fb6b796fa4aaa5 100644 (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);