service: try to fix the service_restart START/STOP msg mismatch

This commit is contained in:
Jaroslav Kysela 2014-11-23 17:01:31 +01:00
parent 44633b8f74
commit 3ba0ae6e62
3 changed files with 17 additions and 15 deletions

View file

@ -1124,7 +1124,7 @@ int
dvb_pmt_callback
(mpegts_table_t *mt, const uint8_t *ptr, int len, int tableid)
{
int r, sect, last, ver, had_components;
int r, sect, last, ver;
uint16_t sid;
mpegts_mux_t *mm = mt->mt_mux;
mpegts_service_t *s;
@ -1143,11 +1143,10 @@ dvb_pmt_callback
/* Process */
tvhdebug("pmt", "sid %04X (%d)", sid, sid);
pthread_mutex_lock(&s->s_stream_mutex);
had_components = !!TAILQ_FIRST(&s->s_components);
r = psi_parse_pmt(mt->mt_mux, s, ptr, len);
pthread_mutex_unlock(&s->s_stream_mutex);
if (r)
service_restart((service_t*)s, had_components);
service_restart((service_t*)s);
/* Finish */
return dvb_table_end(mt, st, sect);
@ -2373,7 +2372,7 @@ psi_parse_pmt
update&PMT_UPDATE_CAID_DELETED ? ", CAID deleted":"",
update&PMT_REORDERED ? ", PIDs reordered":"");
service_request_save((service_t*)t, 0);
service_request_save((service_t*)t, 1);
// Only restart if something that our clients worry about did change
if(update & ~(PMT_UPDATE_NEW_CA_STREAM |

View file

@ -1153,19 +1153,22 @@ service_set_streaming_status_flags_(service_t *t, int set)
* (i.e. an AC3 stream disappears, etc)
*/
void
service_restart(service_t *t, int had_components)
service_restart(service_t *t)
{
int had_components;
pthread_mutex_lock(&t->s_stream_mutex);
if(had_components) {
streaming_pad_deliver(&t->s_streaming_pad,
streaming_msg_create_code(SMT_STOP,
SM_CODE_SOURCE_RECONFIGURED));
}
had_components = TAILQ_FIRST(&t->s_filt_components) != NULL;
service_build_filter(t);
if(TAILQ_FIRST(&t->s_filt_components) != NULL) {
if (had_components)
streaming_pad_deliver(&t->s_streaming_pad,
streaming_msg_create_code(SMT_STOP,
SM_CODE_SOURCE_RECONFIGURED));
streaming_pad_deliver(&t->s_streaming_pad,
streaming_msg_create_data(SMT_START,
service_build_stream_start(t)));
@ -1255,7 +1258,7 @@ service_request_save(service_t *t, int restart)
TAILQ_INSERT_TAIL(&pending_save_queue, t, s_ps_link);
service_ref(t);
pthread_cond_signal(&pending_save_cond);
} else if(restart) {
} else if (restart) {
t->s_ps_onqueue = 2; // upgrade to restart too
}
@ -1291,6 +1294,7 @@ service_saver(void *aux)
{
service_t *t;
int restart;
pthread_mutex_lock(&pending_save_mutex);
while(tvheadend_running) {
@ -1310,9 +1314,8 @@ service_saver(void *aux)
if(t->s_status != SERVICE_ZOMBIE)
t->s_config_save(t);
if(t->s_status == SERVICE_RUNNING && restart) {
service_restart(t, 1);
}
if(t->s_status == SERVICE_RUNNING && restart)
service_restart(t);
service_unref(t);
pthread_mutex_unlock(&global_lock);

View file

@ -546,7 +546,7 @@ service_reset_streaming_status_flags(service_t *t, int flag)
struct streaming_start;
struct streaming_start *service_build_stream_start(service_t *t);
void service_restart(service_t *t, int had_components);
void service_restart(service_t *t);
void service_stream_destroy(service_t *t, elementary_stream_t *st);