]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
service: another STOP/START msg cleanup
authorJaroslav Kysela <perex@perex.cz>
Sun, 23 Nov 2014 16:47:42 +0000 (17:47 +0100)
committerJaroslav Kysela <perex@perex.cz>
Sun, 23 Nov 2014 16:47:42 +0000 (17:47 +0100)
src/service.c
src/service.h
src/subscriptions.c

index db1438c57fd23de6abb0c2c4acfe6a92de10ecff..3d61043b53d1f8e3593059d8af45760c3fc14697 100644 (file)
@@ -1159,7 +1159,8 @@ service_restart(service_t *t)
 
   pthread_mutex_lock(&t->s_stream_mutex);
 
-  had_components = TAILQ_FIRST(&t->s_filt_components) != NULL;
+  had_components = TAILQ_FIRST(&t->s_filt_components) != NULL &&
+                   t->s_running;
 
   service_build_filter(t);
 
@@ -1172,10 +1173,12 @@ service_restart(service_t *t)
     streaming_pad_deliver(&t->s_streaming_pad,
                           streaming_msg_create_data(SMT_START,
                                                     service_build_stream_start(t)));
+    t->s_running = 1;
   } else {
     streaming_pad_deliver(&t->s_streaming_pad,
                           streaming_msg_create_code(SMT_STOP,
                                                     SM_CODE_NO_SERVICE));
+    t->s_running = 0;
   }
 
   pthread_mutex_unlock(&t->s_stream_mutex);
index 950f40f26aace3812f563126874927f533c87993..ce44900fd6baa8dd2f216d006b7ac637d17668ab 100644 (file)
@@ -411,6 +411,7 @@ typedef struct service {
    *
    */
   int s_streaming_live;
+  int s_running;
 
   // Live status
 #define TSS_LIVE             0x01
index 7bafb89150fb09681485b0ee9d9134c34fbecb0b..1b313f8ddb49b5e612e65addb38e92ed3527a372 100644 (file)
@@ -100,6 +100,7 @@ subscription_link_service(th_subscription_t *s, service_t *t)
     // Send a START message to the subscription client
     streaming_target_deliver(s->ths_output, s->ths_start_message);
     s->ths_start_message = NULL;
+    t->s_running = 1;
 
     // Send status report
     sm = streaming_msg_create_code(SMT_SERVICE_STATUS, 
@@ -134,6 +135,7 @@ subscription_unlink_service0(th_subscription_t *s, int reason, int stop)
     // Send a STOP message to the subscription client
     sm = streaming_msg_create_code(SMT_STOP, reason);
     streaming_target_deliver(s->ths_output, sm);
+    t->s_running = 0;
   }
 
   pthread_mutex_unlock(&t->s_stream_mutex);
@@ -480,6 +482,8 @@ subscription_input(void *opauqe, streaming_message_t *sm)
       if(s->ths_start_message != NULL) {
         streaming_target_deliver(s->ths_output, s->ths_start_message);
         s->ths_start_message = NULL;
+        if (s->ths_service)
+          s->ths_service->s_running = 1;
       }
       s->ths_state = SUBSCRIPTION_GOT_SERVICE;
     }