From: Jaroslav Kysela Date: Fri, 12 Jan 2018 19:45:27 +0000 (+0100) Subject: mpegts mux: add mm_nicename cache X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=53bd55ab96720c85dec3293d81cf51a1e5a1d364;p=thirdparty%2Ftvheadend.git mpegts mux: add mm_nicename cache --- diff --git a/src/epggrab/otamux.c b/src/epggrab/otamux.c index 72191fcf1..15716f05a 100644 --- a/src/epggrab/otamux.c +++ b/src/epggrab/otamux.c @@ -191,8 +191,7 @@ epggrab_ota_done ( epggrab_ota_mux_t *om, int reason ) epggrab_ota_save(om); mm = mpegts_mux_find0(&om->om_mux_uuid); - mpegts_mux_nice_name(mm, name, sizeof(name)); - tvhdebug(LS_EPGGRAB, "grab done for %s (%s)", name, reasons[reason]); + tvhdebug(LS_EPGGRAB, "grab done for %s (%s)", mm->mm_nicename, reasons[reason]); mtimer_disarm(&om->om_timer); mtimer_disarm(&om->om_data_timer); @@ -307,16 +306,12 @@ static void epggrab_mux_stop ( mpegts_mux_t *mm, void *p, int reason ) { epggrab_ota_mux_t *ota; - char name[256]; int done = EPGGRAB_OTA_DONE_STOLEN; if (reason == SM_CODE_NO_INPUT) done = EPGGRAB_OTA_DONE_NO_DATA; - if (tvhtrace_enabled()) { - mpegts_mux_nice_name(mm, name, sizeof(name)); - tvhtrace(LS_EPGGRAB, "mux %s (%p) stop", name, mm); - } + tvhtrace(LS_EPGGRAB, "mux %s (%p) stop", mm->mm_nicename, mm); TAILQ_FOREACH(ota, &epggrab_ota_active, om_q_link) if (!uuid_cmp(&ota->om_mux_uuid, &mm->mm_id.in_uuid)) { epggrab_ota_done(ota, done); @@ -345,9 +340,7 @@ epggrab_ota_register ota = RB_INSERT_SORTED(&epggrab_ota_all, epggrab_ota_mux_skel, om_global_link, om_id_cmp); if (!ota) { - char buf[256]; - mpegts_mux_nice_name(mm, buf, sizeof(buf)); - tvhinfo(LS_EPGGRAB, "%s - registering mux for OTA EPG", buf); + tvhinfo(LS_EPGGRAB, "%s - registering mux for OTA EPG", mm->mm_nicename); ota = epggrab_ota_mux_skel; SKEL_USED(epggrab_ota_mux_skel); TAILQ_INSERT_SORTED(&epggrab_ota_pending, ota, om_q_link, om_mux_cmp); @@ -539,10 +532,7 @@ next_one: } if (epg_flag < 0 || epg_flag == MM_EPG_DISABLE) { - if (tvhtrace_enabled()) { - mpegts_mux_nice_name(mm, name, sizeof(name)); - tvhtrace(LS_EPGGRAB, "epg mux %s is disabled, skipping", name); - } + tvhtrace(LS_EPGGRAB, "epg mux %s is disabled, skipping", mm->mm_nicename); goto done; } @@ -556,8 +546,7 @@ next_one: } } if ((i == 0 || (r == 0 && modname)) && epg_flag != MM_EPG_FORCE) { - mpegts_mux_nice_name(mm, name, sizeof(name)); - tvhdebug(LS_EPGGRAB, "no OTA modules active for %s, check again next time", name); + tvhdebug(LS_EPGGRAB, "no OTA modules active for %s, check again next time", mm->mm_nicename); goto done; } @@ -565,7 +554,6 @@ next_one: free(om->om_force_modname); om->om_force_modname = modname ? strdup(modname) : NULL; - /* Subscribe to the mux */ om->om_requeue = 1; if ((r = mpegts_mux_subscribe(mm, NULL, "epggrab", SUBSCRIPTION_PRIO_EPG, @@ -573,27 +561,18 @@ next_one: SUBSCRIPTION_ONESHOT | SUBSCRIPTION_TABLES))) { if (r != SM_CODE_NO_ADAPTERS) { - if (tvhtrace_enabled()) { - mpegts_mux_nice_name(mm, name, sizeof(name)); - tvhtrace(LS_EPGGRAB, "subscription failed for %s (result %d)", name, r); - } + tvhtrace(LS_EPGGRAB, "subscription failed for %s (result %d)", mm->mm_nicename, r); TAILQ_INSERT_TAIL(&epggrab_ota_pending, om, om_q_link); om->om_q_type = EPGGRAB_OTA_MUX_PENDING; om->om_retry_time = mclk() + mono2sec(60); if (r == SM_CODE_NO_FREE_ADAPTER) net->failed = 1; } else { - if (tvhtrace_enabled()) { - mpegts_mux_nice_name(mm, name, sizeof(name)); - tvhtrace(LS_EPGGRAB, "no free adapter for %s (subscribe)", name); - } + tvhtrace(LS_EPGGRAB, "no free adapter for %s (subscribe)", mm->mm_nicename); net->fatal = 1; } } else { - if (tvhtrace_enabled()) { - mpegts_mux_nice_name(mm, name, sizeof(name)); - tvhtrace(LS_EPGGRAB, "mux %s (%p), started", name, mm); - } + tvhtrace(LS_EPGGRAB, "mux %s (%p), started", name, mm->mm_nicename); kick = 0; /* note: it is possible that the mux_start listener is not called */ /* for reshared mux subscriptions, so call it (maybe second time) here.. */ @@ -679,7 +658,6 @@ epggrab_ota_service_trace ( epggrab_ota_mux_t *ota, epggrab_ota_svc_link_t *svcl, const char *op ) { - char buf[256]; mpegts_mux_t *mm; mpegts_service_t *svc; @@ -689,10 +667,9 @@ epggrab_ota_service_trace ( epggrab_ota_mux_t *ota, mm = mpegts_mux_find0(&ota->om_mux_uuid); svc = mpegts_service_find_by_uuid0(&svcl->uuid); if (mm && svc) { - mpegts_mux_nice_name(mm, buf, sizeof(buf)); - tvhtrace(LS_EPGGRAB, "ota %s %s service %s", buf, op, svc->s_nicename); + tvhtrace(LS_EPGGRAB, "ota %s %s service %s", mm->mm_nicename, op, svc->s_nicename); } else if (tvheadend_is_running()) - tvhtrace(LS_EPGGRAB, "ota %s, problem? (%p %p)", op, mm, svc); + tvhtrace(LS_EPGGRAB, "ota %s %s, problem? (%p %p)", mm->mm_nicename, op, mm, svc); } void @@ -777,11 +754,7 @@ epggrab_ota_load_one hts_settings_remove("epggrab/otamux/%s", uuid); return; } - if (tvhtrace_enabled()) { - char name[256]; - mpegts_mux_nice_name(mm, name, sizeof(name)); - tvhtrace(LS_EPGGRAB, "loading config for %s", name); - } + tvhtrace(LS_EPGGRAB, "loading config for %s", mm->mm_nicename); ota = calloc(1, sizeof(epggrab_ota_mux_t)); ota->om_mux_uuid = mm->mm_id.in_uuid; diff --git a/src/input/mpegts.h b/src/input/mpegts.h index 9493e0d0d..44297d7f1 100644 --- a/src/input/mpegts.h +++ b/src/input/mpegts.h @@ -434,6 +434,7 @@ struct mpegts_mux LIST_ENTRY(mpegts_mux) mm_network_link; mpegts_network_t *mm_network; + char *mm_nicename; char *mm_provider_network_name; uint16_t mm_onid; uint16_t mm_tsid; diff --git a/src/input/mpegts/dvb_psi.c b/src/input/mpegts/dvb_psi.c index bdbdcf75c..5fc522fd2 100644 --- a/src/input/mpegts/dvb_psi.c +++ b/src/input/mpegts/dvb_psi.c @@ -151,12 +151,9 @@ mpegts_mux_alive(mpegts_mux_t *mm) static void dvb_bouquet_comment ( bouquet_t *bq, mpegts_mux_t *mm ) { - char comment[128]; - if (bq->bq_comment && bq->bq_comment[0]) return; - mpegts_mux_nice_name(mm, comment, sizeof(comment)); - bouquet_change_comment(bq, comment, 0); + bouquet_change_comment(bq, mm->mm_nicename, 0); } static void @@ -943,7 +940,6 @@ dvb_pat_callback mpegts_mux_t *mm = mt->mt_mux; mpegts_psi_table_state_t *st = NULL; mpegts_service_t *s; - char buf[256]; /* Begin */ if (tableid != 0) return -1; @@ -953,8 +949,7 @@ dvb_pat_callback if (r != 1) return r; if (tsid == 0 && !mm->mm_tsid_accept_zero_value) { if (tvhlog_limit(&mm->mm_tsid_loglimit, 2)) { - mpegts_mux_nice_name(mm, buf, sizeof(buf)); - tvhwarn(mt->mt_subsys, "%s: %s: TSID zero value detected, ignoring", mt->mt_name, buf); + tvhwarn(mt->mt_subsys, "%s: %s: TSID zero value detected, ignoring", mt->mt_name, mm->mm_nicename); } goto end; } @@ -964,14 +959,12 @@ dvb_pat_callback if (mm->mm_tsid != MPEGTS_TSID_NONE) { if (mm->mm_tsid && mm->mm_tsid != tsid) { if (++mm->mm_tsid_checks > 12) { - mpegts_mux_nice_name(mm, buf, sizeof(buf)); tvhwarn(mt->mt_subsys, "%s: %s: TSID change detected - old %04x (%d), new %04x (%d)", - mt->mt_name, buf, mm->mm_tsid, mm->mm_tsid, tsid, tsid); + mt->mt_name, mm->mm_nicename, mm->mm_tsid, mm->mm_tsid, tsid, tsid); } else { if (tvhtrace_enabled()) { - mpegts_mux_nice_name(mm, buf, sizeof(buf)); tvhtrace(mt->mt_subsys, "%s: %s: ignore TSID - old %04x (%d), new %04x (%d) (checks %d)", - mt->mt_name, buf, mm->mm_tsid, mm->mm_tsid, tsid, tsid, mm->mm_tsid_checks); + mt->mt_name, mm->mm_nicename, mm->mm_tsid, mm->mm_tsid, tsid, tsid, mm->mm_tsid_checks); } return 0; /* keep rolling */ } @@ -1272,7 +1265,7 @@ dvb_nit_mux const uint8_t *dlptr, *dptr, *lptr_orig = lptr; const char *charset; mpegts_network_t *mn; - char buf[128], dauth[256]; + char dauth[256]; if (mux && mux->mm_enabled != MM_ENABLE) bi = NULL; @@ -1281,13 +1274,10 @@ dvb_nit_mux charset = discovery ? NULL : dvb_charset_find(mn, mux, NULL); if (!discovery || tvhtrace_enabled()) { - if (mux) - mpegts_mux_nice_name(mux, buf, sizeof(buf)); - else - strcpy(buf, ""); tvhlog(discovery ? LOG_TRACE : LOG_DEBUG, mt->mt_subsys, "%s: onid %04X (%d) tsid %04X (%d) mux %s%s", - mt->mt_name, onid, onid, tsid, tsid, buf, + mt->mt_name, onid, onid, tsid, tsid, + mm->mm_nicename ?: "", discovery ? " (discovery)" : ""); } @@ -1641,11 +1631,8 @@ dvb_sdt_mux const uint8_t *lptr, *dptr; int llen, dlen; mpegts_network_t *mn = mm->mm_network; - char buf[128]; - - mpegts_mux_nice_name(mm, buf, sizeof(buf)); - tvhdebug(mt->mt_subsys, "%s: mux %s", mt->mt_name, buf); + tvhdebug(mt->mt_subsys, "%s: mux %s", mt->mt_name, mm->mm_nicename); /* Service loop */ while(len >= 5) { diff --git a/src/input/mpegts/iptv/iptv.c b/src/input/mpegts/iptv/iptv.c index e2bf28073..547f76293 100644 --- a/src/input/mpegts/iptv/iptv.c +++ b/src/input/mpegts/iptv/iptv.c @@ -294,7 +294,6 @@ iptv_input_start_mux ( mpegts_input_t *mi, mpegts_mux_instance_t *mmi, int weigh } /* Parse URL */ - mpegts_mux_nice_name((mpegts_mux_t*)im, buf, sizeof(buf)); urlinit(&url); #if ENABLE_LIBAV @@ -322,7 +321,7 @@ iptv_input_start_mux ( mpegts_input_t *mi, mpegts_mux_instance_t *mmi, int weigh } else { if (urlparse(raw ?: "", &url)) { - tvherror(LS_IPTV, "%s - invalid URL [%s]", buf, raw); + tvherror(LS_IPTV, "%s - invalid URL [%s]", im->mm_nicename, raw); return ret; } scheme = url.scheme; @@ -332,7 +331,7 @@ iptv_input_start_mux ( mpegts_input_t *mi, mpegts_mux_instance_t *mmi, int weigh /* Find scheme handler */ ih = iptv_handler_find(scheme ?: ""); if (!ih) { - tvherror(LS_IPTV, "%s - unsupported scheme [%s]", buf, scheme ?: "none"); + tvherror(LS_IPTV, "%s - unsupported scheme [%s]", im->mm_nicename, scheme ?: "none"); return ret; } @@ -579,14 +578,11 @@ iptv_input_recv_packets ( iptv_mux_t *im, ssize_t len ) int iptv_input_fd_started ( iptv_mux_t *im ) { - char buf[256]; - /* Setup poll */ if (im->mm_iptv_fd > 0) { /* Error? */ if (tvhpoll_add1(iptv_poll, im->mm_iptv_fd, TVHPOLL_IN, im) < 0) { - mpegts_mux_nice_name((mpegts_mux_t*)im, buf, sizeof(buf)); - tvherror(LS_IPTV, "%s - failed to add to poll q", buf); + tvherror(LS_IPTV, "%s - failed to add to poll q", im->mm_nicename); close(im->mm_iptv_fd); im->mm_iptv_fd = -1; return -1; @@ -597,8 +593,7 @@ iptv_input_fd_started ( iptv_mux_t *im ) if (im->mm_iptv_fd2 > 0) { /* Error? */ if (tvhpoll_add1(iptv_poll, im->mm_iptv_fd2, TVHPOLL_IN, im) < 0) { - mpegts_mux_nice_name((mpegts_mux_t*)im, buf, sizeof(buf)); - tvherror(LS_IPTV, "%s - failed to add to poll q (2)", buf); + tvherror(LS_IPTV, "%s - failed to add to poll q (2)", im->mm_nicename); close(im->mm_iptv_fd2); im->mm_iptv_fd2 = -1; return -1; diff --git a/src/input/mpegts/iptv/iptv_udp.c b/src/input/mpegts/iptv/iptv_udp.c index 1d61cc98d..0d55fbd6e 100644 --- a/src/input/mpegts/iptv/iptv_udp.c +++ b/src/input/mpegts/iptv/iptv_udp.c @@ -34,15 +34,12 @@ static int iptv_udp_start ( iptv_mux_t *im, const char *raw, const url_t *url ) { - char name[256]; udp_connection_t *conn; udp_multirecv_t *um; - mpegts_mux_nice_name((mpegts_mux_t*)im, name, sizeof(name)); - /* Note: url->user is used for specifying multicast source address (SSM) here. The URL format is rtp://@: */ - conn = udp_bind(LS_IPTV, name, url->host, url->port, url->user, + conn = udp_bind(LS_IPTV, im->mm_nicename, url->host, url->port, url->user, im->mm_iptv_interface, IPTV_BUF_SIZE, 4*1024); if (conn == UDP_FATAL_ERROR) return SM_CODE_TUNING_FAILED; @@ -81,7 +78,6 @@ iptv_udp_read ( iptv_mux_t *im ) struct iovec *iovec; udp_multirecv_t *um = im->im_data; ssize_t res = 0; - char name[256]; n = udp_multirecv_read(um, im->mm_iptv_fd, IPTV_PKTS, &iovec); if (n < 0) @@ -100,8 +96,7 @@ iptv_udp_read ( iptv_mux_t *im ) } if (im->mm_iptv_rtp_seq < 0xffff && im->mm_iptv_rtp_seq > 0x3ff) { - mpegts_mux_nice_name((mpegts_mux_t*)im, name, sizeof(name)); - tvherror(LS_IPTV, "receving non-raw UDP data for %s!", name); + tvherror(LS_IPTV, "receving non-raw UDP data for %s!", im->mm_nicename); im->mm_iptv_rtp_seq = 0x10000; /* no further logs! */ } diff --git a/src/input/mpegts/linuxdvb/linuxdvb_frontend.c b/src/input/mpegts/linuxdvb/linuxdvb_frontend.c index 7509f794a..194dfa258 100644 --- a/src/input/mpegts/linuxdvb/linuxdvb_frontend.c +++ b/src/input/mpegts/linuxdvb/linuxdvb_frontend.c @@ -657,15 +657,14 @@ static void linuxdvb_frontend_stop_mux ( mpegts_input_t *mi, mpegts_mux_instance_t *mmi ) { - char buf1[256], buf2[256]; + char buf1[256]; linuxdvb_frontend_t *lfe = (linuxdvb_frontend_t*)mi, *lfe2; if (lfe->lfe_master) assert(lfe->lfe_type == DVB_TYPE_S); mi->mi_display_name(mi, buf1, sizeof(buf1)); - mpegts_mux_nice_name(mmi->mmi_mux, buf2, sizeof(buf2)); - tvhdebug(LS_LINUXDVB, "%s - stopping %s", buf1, buf2); + tvhdebug(LS_LINUXDVB, "%s - stopping %s", buf1, mmi->mmi_mux->mm_nicename); /* Stop thread */ if (lfe->lfe_dvr_pipe.wr > 0) { @@ -1957,11 +1956,10 @@ linuxdvb_frontend_tune1 ( linuxdvb_frontend_t *lfe, mpegts_mux_instance_t *mmi, uint32_t freq ) { int r = 0, i, rep; - char buf1[256], buf2[256]; + char buf1[256]; lfe->mi_display_name((mpegts_input_t*)lfe, buf1, sizeof(buf1)); - mpegts_mux_nice_name(mmi->mmi_mux, buf2, sizeof(buf2)); - tvhdebug(LS_LINUXDVB, "%s - starting %s", buf1, buf2); + tvhdebug(LS_LINUXDVB, "%s - starting %s", buf1, mmi->mmi_mux->mm_nicename); /* Tune */ tvhtrace(LS_LINUXDVB, "%s - tuning", buf1); diff --git a/src/input/mpegts/mpegts_input.c b/src/input/mpegts/mpegts_input.c index 8aefcc903..ef3ec3ae5 100644 --- a/src/input/mpegts/mpegts_input.c +++ b/src/input/mpegts/mpegts_input.c @@ -506,7 +506,6 @@ mpegts_input_open_pid ( mpegts_input_t *mi, mpegts_mux_t *mm, int pid, int type, int weight, void *owner, int reopen ) { - char buf[512]; mpegts_pid_t *mp; mpegts_pid_sub_t *mps, *mps2; @@ -531,16 +530,14 @@ mpegts_input_open_pid if (mps2->mps_owner == owner) break; if (mps2 == NULL) { LIST_INSERT_HEAD(&mm->mm_all_subs, mps, mps_svcraw_link); - mpegts_mux_nice_name(mm, buf, sizeof(buf)); tvhdebug(LS_MPEGTS, "%s - open PID %s subscription [%04x/%p]", - buf, (type & MPS_TABLES) ? "tables" : "fullmux", type, owner); + mm->mm_nicename, (type & MPS_TABLES) ? "tables" : "fullmux", type, owner); mm->mm_update_pids_flag = 1; } else { if (!reopen) { - mpegts_mux_nice_name(mm, buf, sizeof(buf)); tvherror(LS_MPEGTS, "%s - open PID %04x (%d) failed, dupe sub (owner %p)", - buf, mp->mp_pid, mp->mp_pid, owner); + mm->mm_nicename, mp->mp_pid, mp->mp_pid, owner); } free(mps); mp = NULL; @@ -551,15 +548,13 @@ mpegts_input_open_pid LIST_INSERT_HEAD(&mp->mp_raw_subs, mps, mps_raw_link); if (type & MPS_SERVICE) LIST_INSERT_HEAD(&mp->mp_svc_subs, mps, mps_svcraw_link); - mpegts_mux_nice_name(mm, buf, sizeof(buf)); tvhdebug(LS_MPEGTS, "%s - open PID %04X (%d) [%d/%p]", - buf, mp->mp_pid, mp->mp_pid, type, owner); + mm->mm_nicename, mp->mp_pid, mp->mp_pid, type, owner); mm->mm_update_pids_flag = 1; } else { if (!reopen) { - mpegts_mux_nice_name(mm, buf, sizeof(buf)); tvherror(LS_MPEGTS, "%s - open PID %04x (%d) failed, dupe sub (owner %p)", - buf, mp->mp_pid, mp->mp_pid, owner); + mm->mm_nicename, mp->mp_pid, mp->mp_pid, owner); } free(mps); mp = NULL; @@ -572,7 +567,6 @@ int mpegts_input_close_pid ( mpegts_input_t *mi, mpegts_mux_t *mm, int pid, int type, int weight, void *owner ) { - char buf[512]; mpegts_pid_sub_t *mps, skel; mpegts_pid_t *mp; int mask; @@ -581,12 +575,11 @@ mpegts_input_close_pid if (!(mp = mpegts_mux_find_pid(mm, pid, 0))) return -1; if (pid == MPEGTS_FULLMUX_PID || pid == MPEGTS_TABLES_PID) { - mpegts_mux_nice_name(mm, buf, sizeof(buf)); LIST_FOREACH(mps, &mm->mm_all_subs, mps_svcraw_link) if (mps->mps_owner == owner) break; if (mps == NULL) return -1; tvhdebug(LS_MPEGTS, "%s - close PID %s subscription [%04x/%p]", - buf, pid == MPEGTS_TABLES_PID ? "tables" : "fullmux", + mm->mm_nicename, pid == MPEGTS_TABLES_PID ? "tables" : "fullmux", type, owner); if (pid == MPEGTS_FULLMUX_PID) mpegts_input_close_pids(mi, mm, owner, 0); @@ -607,9 +600,8 @@ mpegts_input_close_pid mm->mm_last_mp = NULL; } if (mps) { - mpegts_mux_nice_name(mm, buf, sizeof(buf)); tvhdebug(LS_MPEGTS, "%s - close PID %04X (%d) [%d/%p]", - buf, mp->mp_pid, mp->mp_pid, type, owner); + mm->mm_nicename, mp->mp_pid, mp->mp_pid, type, owner); if (type & MPS_RAW) LIST_REMOVE(mps, mps_raw_link); if (type & MPS_SERVICE) @@ -1326,13 +1318,10 @@ mpegts_input_process #if ENABLE_TSDEBUG off_t tsdebug_pos; #endif - char muxname[256]; if (mm == NULL || (mmi = mm->mm_active) == NULL) return 0; - mpegts_mux_nice_name(mm, muxname, sizeof(muxname)); - assert(mm == mmi->mmi_mux); #if ENABLE_TSDEBUG @@ -1381,7 +1370,7 @@ mpegts_input_process tsb2 < tsb2_end; tsb2 += 188) { cc = tsb2[3] & 0x0f; if (cc2 != 0xff && cc2 != cc) { - tvhtrace(LS_MPEGTS, "%s: pid %04X cc err %2d != %2d", muxname, pid, cc, cc2); + tvhtrace(LS_MPEGTS, "%s: pid %04X cc err %2d != %2d", mm->mm_nicename, pid, cc, cc2); atomic_add(&mmi->tii_stats.cc, 1); } cc2 = (cc + 1) & 0xF; @@ -1425,7 +1414,7 @@ mpegts_input_process if (type & (MPS_TABLE | MPS_FTABLE)) { if (!(tsb[1] & 0x80)) { if (type & MPS_FTABLE) - mpegts_input_table_dispatch(mm, muxname, tsb, llen); + mpegts_input_table_dispatch(mm, mm->mm_nicename, tsb, llen); if (type & MPS_TABLE) { if (mi->mi_table_queue_size >= 2*1024*1024) { if (tvhlog_limit(&mi->mi_input_queue_loglimit, 10)) @@ -1597,7 +1586,6 @@ mpegts_input_table_thread ( void *aux ) mpegts_table_feed_t *mtf; mpegts_input_t *mi = aux; mpegts_mux_t *mm = NULL; - char muxname[256]; pthread_mutex_lock(&mi->mi_output_lock); while (atomic_get(&mi->mi_running)) { @@ -1615,13 +1603,9 @@ mpegts_input_table_thread ( void *aux ) /* Process */ pthread_mutex_lock(&global_lock); if (atomic_get(&mi->mi_running)) { - if (mm != mtf->mtf_mux) { - mm = mtf->mtf_mux; - if (mm) - mpegts_mux_nice_name(mm, muxname, sizeof(muxname)); - } + mm = mtf->mtf_mux; if (mm && mm->mm_active) - mpegts_input_table_dispatch(mm, muxname, mtf->mtf_tsb, mtf->mtf_len); + mpegts_input_table_dispatch(mm, mm->mm_nicename, mtf->mtf_tsb, mtf->mtf_len); } pthread_mutex_unlock(&global_lock); diff --git a/src/input/mpegts/mpegts_mux.c b/src/input/mpegts/mpegts_mux.c index 35479e373..ab7fe94c5 100644 --- a/src/input/mpegts/mpegts_mux.c +++ b/src/input/mpegts/mpegts_mux.c @@ -83,7 +83,6 @@ mpegts_mux_instance_create0 LIST_INSERT_HEAD(&mm->mm_instances, mmi, mmi_mux_link); LIST_INSERT_HEAD(&mi->mi_mux_instances, (tvh_input_instance_t *)mmi, tii_input_link); - return mmi; } @@ -227,21 +226,25 @@ mpegts_mux_instance_start ( mpegts_mux_instance_t **mmiptr, service_t *t, int weight ) { int r; - char buf[256], buf2[256]; + char buf[256]; mpegts_mux_instance_t *mmi = *mmiptr; mpegts_mux_t * mm = mmi->mmi_mux; mpegts_input_t * mi = mmi->mmi_input; mpegts_service_t * s; - mpegts_mux_nice_name(mm, buf, sizeof(buf)); /* Already active */ if (mm->mm_active) { *mmiptr = mm->mm_active; - tvhdebug(LS_MPEGTS, "%s - already active", buf); + tvhdebug(LS_MPEGTS, "%s - already active", mm->mm_nicename); mpegts_mux_scan_active(mm, buf, (*mmiptr)->mmi_input); return 0; } + /* Update nicename */ + mpegts_mux_nice_name(mm, buf, sizeof(buf)); + free(mm->mm_nicename); + mm->mm_nicename = strdup(buf); + /* Dead service check */ LIST_FOREACH(s, &mm->mm_services, s_dvb_mux_link) s->s_dvb_check_seen = s->s_dvb_last_seen; @@ -249,8 +252,8 @@ mpegts_mux_instance_start mm->mm_tsid_checks = 0; /* Start */ - mi->mi_display_name(mi, buf2, sizeof(buf2)); - tvhinfo(LS_MPEGTS, "%s - tuning on %s", buf, buf2); + mi->mi_display_name(mi, buf, sizeof(buf)); + tvhinfo(LS_MPEGTS, "%s - tuning on %s", mm->mm_nicename, buf); if (mi->mi_linked) mpegts_mux_unsubscribe_linked(mi, t); @@ -261,7 +264,7 @@ mpegts_mux_instance_start if (r) return r; /* Start */ - tvhdebug(LS_MPEGTS, "%s - started", buf); + tvhdebug(LS_MPEGTS, "%s - started", mm->mm_nicename); mm->mm_start_monoclock = mclk(); mi->mi_started_mux(mi, mmi); @@ -753,18 +756,16 @@ mpegts_mux_free ( mpegts_mux_t *mm ) free(mm->mm_provider_network_name); free(mm->mm_crid_authority); free(mm->mm_charset); + free(mm->mm_nicename); free(mm); } void mpegts_mux_delete ( mpegts_mux_t *mm, int delconf ) { - char buf[256]; - idnode_save_check(&mm->mm_id, delconf); - mpegts_mux_nice_name(mm, buf, sizeof(buf)); - tvhinfo(LS_MPEGTS, "%s (%p) - deleting", buf, mm); + tvhinfo(LS_MPEGTS, "%s (%p) - deleting", mm->mm_nicename, mm); /* Stop */ mm->mm_stop(mm, 1, SM_CODE_ABORTED); @@ -820,21 +821,19 @@ mpegts_mux_has_subscribers ( mpegts_mux_t *mm, const char *name ) static void mpegts_mux_stop ( mpegts_mux_t *mm, int force, int reason ) { - char buf[256], buf2[256], *s; + char *s; mpegts_mux_instance_t *mmi = mm->mm_active, *mmi2; mpegts_input_t *mi = NULL, *mi2; mpegts_pid_t *mp; mpegts_pid_sub_t *mps; - mpegts_mux_nice_name(mm, buf, sizeof(buf)); - - if (!force && mpegts_mux_has_subscribers(mm, buf)) + if (!force && mpegts_mux_has_subscribers(mm, mm->mm_nicename)) return; /* Stop possible recursion */ if (!mmi) return; - tvhdebug(LS_MPEGTS, "%s - stopping mux%s", buf, force ? " (forced)" : ""); + tvhdebug(LS_MPEGTS, "%s - stopping mux%s", mm->mm_nicename, force ? " (forced)" : ""); mi = mmi->mmi_input; assert(mi); @@ -843,15 +842,14 @@ mpegts_mux_stop ( mpegts_mux_t *mm, int force, int reason ) if (mi->mi_linked) { mi2 = mpegts_input_find(mi->mi_linked); if (mi2 && (mmi2 = LIST_FIRST(&mi2->mi_mux_active)) != NULL) { - mpegts_mux_nice_name(mmi2->mmi_mux, buf2, sizeof(buf2)); - if (mmi2 && !mpegts_mux_has_subscribers(mmi2->mmi_mux, buf2)) { + if (mmi2 && !mpegts_mux_has_subscribers(mmi2->mmi_mux, mmi2->mmi_mux->mm_nicename)) { s = mi2->mi_linked; mi2->mi_linked = NULL; mpegts_mux_unsubscribe_linked(mi2, NULL); mi2->mi_linked = s; } else { if (!force) { - tvhtrace(LS_MPEGTS, "%s - keeping subscribed (linked tuner active)", buf); + tvhtrace(LS_MPEGTS, "%s - keeping subscribed (linked tuner active)", mm->mm_nicename); return; } } @@ -869,10 +867,10 @@ mpegts_mux_stop ( mpegts_mux_t *mm, int force, int reason ) assert(mm->mm_active == NULL); /* Flush all tables */ - tvhtrace(LS_MPEGTS, "%s - flush tables", buf); + tvhtrace(LS_MPEGTS, "%s - flush tables", mm->mm_nicename); mpegts_table_flush_all(mm); - tvhtrace(LS_MPEGTS, "%s - mi=%p", buf, (void *)mi); + tvhtrace(LS_MPEGTS, "%s - mi=%p", mm->mm_nicename, (void *)mi); /* Flush table data queue */ mpegts_input_flush_mux(mi, mm); @@ -886,14 +884,16 @@ mpegts_mux_stop ( mpegts_mux_t *mm, int force, int reason ) mp->mp_pid == MPEGTS_TABLES_PID) { while ((mps = LIST_FIRST(&mm->mm_all_subs))) { tvhdebug(LS_MPEGTS, "%s - close PID %s subscription [%d/%p]", - buf, mp->mp_pid == MPEGTS_TABLES_PID ? "tables" : "fullmux", + mm->mm_nicename, + mp->mp_pid == MPEGTS_TABLES_PID ? "tables" : "fullmux", mps->mps_type, mps->mps_owner); LIST_REMOVE(mps, mps_svcraw_link); free(mps); } } else { while ((mps = RB_FIRST(&mp->mp_subs))) { - tvhdebug(LS_MPEGTS, "%s - close PID %04X (%d) [%d/%p]", buf, + tvhdebug(LS_MPEGTS, "%s - close PID %04X (%d) [%d/%p]", + mm->mm_nicename, mp->mp_pid, mp->mp_pid, mps->mps_type, mps->mps_owner); RB_REMOVE(&mp->mp_subs, mps, mps_link); if (mps->mps_type & (MPS_SERVICE|MPS_ALL)) @@ -1132,14 +1132,12 @@ static void mpegts_mux_scan_timeout ( void *aux ) { int c, q, w; - char buf[256]; mpegts_mux_t *mm = aux; mpegts_table_t *mt; - mpegts_mux_nice_name(mm, buf, sizeof(buf)); /* Timeout */ if (mm->mm_scan_init) { - mpegts_mux_scan_done(mm, buf, -1); + mpegts_mux_scan_done(mm, mm->mm_nicename, -1); return; } mm->mm_scan_init = 1; @@ -1169,17 +1167,17 @@ again: /* No DATA - give up now */ if (!c) { - mpegts_mux_scan_done(mm, buf, 0); + mpegts_mux_scan_done(mm, mm->mm_nicename, 0); /* Pending tables (another 20s or 30s - bit arbitrary) */ } else if (q) { - tvhtrace(LS_MPEGTS, "%s - scan needs more time", buf); + tvhtrace(LS_MPEGTS, "%s - scan needs more time", mm->mm_nicename); mtimer_arm_rel(&mm->mm_scan_timeout, mpegts_mux_scan_timeout, mm, sec2mono(w ? 30 : 20)); return; /* Complete */ } else { - mpegts_mux_scan_done(mm, buf, 1); + mpegts_mux_scan_done(mm, mm->mm_nicename, 1); } } @@ -1264,6 +1262,7 @@ mpegts_mux_create0 mpegts_mux_nice_name(mm, buf, sizeof(buf)); tvhtrace(LS_MPEGTS, "%s - created", buf); + mm->mm_nicename = strdup(buf); return mm; } @@ -1308,11 +1307,7 @@ mpegts_mux_set_onid ( mpegts_mux_t *mm, uint16_t onid ) if (onid == mm->mm_onid) return 0; mm->mm_onid = onid; - if (tvhtrace_enabled()) { - char buf[256]; - mpegts_mux_nice_name(mm, buf, sizeof(buf)); - tvhtrace(LS_MPEGTS, "%s - set onid %04X (%d)", buf, onid, onid); - } + tvhtrace(LS_MPEGTS, "%s - set onid %04X (%d)", mm->mm_nicename, onid, onid); idnode_changed(&mm->mm_id); return 1; } @@ -1325,11 +1320,7 @@ mpegts_mux_set_tsid ( mpegts_mux_t *mm, uint16_t tsid, int force ) if (!force && mm->mm_tsid != MPEGTS_TSID_NONE) return 0; mm->mm_tsid = tsid; - if (tvhtrace_enabled()) { - char buf[256]; - mpegts_mux_nice_name(mm, buf, sizeof(buf)); - tvhtrace(LS_MPEGTS, "%s - set tsid %04X (%d)", buf, tsid, tsid); - } + tvhtrace(LS_MPEGTS, "%s - set tsid %04X (%d)", mm->mm_nicename, tsid, tsid); idnode_changed(&mm->mm_id); return 1; } @@ -1340,11 +1331,7 @@ mpegts_mux_set_crid_authority ( mpegts_mux_t *mm, const char *defauth ) if (defauth && !strcmp(defauth, mm->mm_crid_authority ?: "")) return 0; tvh_str_update(&mm->mm_crid_authority, defauth); - if (tvhtrace_enabled()) { - char buf[256]; - mpegts_mux_nice_name(mm, buf, sizeof(buf)); - tvhtrace(LS_MPEGTS, "%s - set crid authority %s", buf, defauth); - } + tvhtrace(LS_MPEGTS, "%s - set crid authority %s", mm->mm_nicename, defauth); idnode_changed(&mm->mm_id); return 1; } @@ -1383,11 +1370,7 @@ void mpegts_mux_remove_subscriber ( mpegts_mux_t *mm, th_subscription_t *s, int reason ) { - if (tvhtrace_enabled()) { - char buf[256]; - mpegts_mux_nice_name(mm, buf, sizeof(buf)); - tvhtrace(LS_MPEGTS, "%s - remove subscriber (reason %i)", buf, reason); - } + tvhtrace(LS_MPEGTS, "%s - remove subscriber (reason %i)", mm->mm_nicename, reason); mm->mm_stop(mm, 0, reason); } diff --git a/src/input/mpegts/mpegts_mux_dvb.c b/src/input/mpegts/mpegts_mux_dvb.c index 668fe4d33..e4f362fdc 100644 --- a/src/input/mpegts/mpegts_mux_dvb.c +++ b/src/input/mpegts/mpegts_mux_dvb.c @@ -1114,6 +1114,7 @@ dvb_mux_create0 htsmsg_t *c, *c2, *e; htsmsg_field_t *f; dvb_fe_delivery_system_t delsys; + char buf[512]; char ubuf1[UUID_HEX_SIZE]; char ubuf2[UUID_HEX_SIZE]; @@ -1178,6 +1179,10 @@ dvb_mux_create0 lm->mm_config_save = dvb_mux_config_save; lm->mm_create_instances = dvb_mux_create_instances; + mpegts_mux_nice_name(mm, buf, sizeof(buf)); + free(mm->mm_nicename); + mm->mm_nicename = strdup(buf); + /* No config */ if (!conf) return lm; diff --git a/src/input/mpegts/mpegts_network_scan.c b/src/input/mpegts/mpegts_network_scan.c index 279c22264..61a5519a6 100644 --- a/src/input/mpegts/mpegts_network_scan.c +++ b/src/input/mpegts/mpegts_network_scan.c @@ -212,14 +212,12 @@ void mpegts_network_scan_queue_del ( mpegts_mux_t *mm ) { mpegts_network_t *mn = mm->mm_network; - char buf[384]; if (mm->mm_scan_state == MM_SCAN_STATE_ACTIVE) { TAILQ_REMOVE(&mn->mn_scan_active, mm, mm_scan_link); } else if (mm->mm_scan_state == MM_SCAN_STATE_PEND) { TAILQ_REMOVE(&mn->mn_scan_pend, mm, mm_scan_link); } - mpegts_mux_nice_name(mm, buf, sizeof(buf)); - tvhdebug(LS_MPEGTS, "removing mux %s from scan queue", buf); + tvhdebug(LS_MPEGTS, "removing mux %s from scan queue", mm->mm_nicename); mm->mm_scan_state = MM_SCAN_STATE_IDLE; mm->mm_scan_weight = 0; mtimer_disarm(&mm->mm_scan_timeout); @@ -232,7 +230,6 @@ mpegts_network_scan_queue_add ( mpegts_mux_t *mm, int weight, int flags, int delay ) { int reload = 0; - char buf[384]; mpegts_network_t *mn = mm->mm_network; if (!mm->mm_is_enabled(mm)) return; @@ -255,9 +252,8 @@ mpegts_network_scan_queue_add TAILQ_REMOVE(&mn->mn_scan_pend, mm, mm_scan_link); } - mpegts_mux_nice_name(mm, buf, sizeof(buf)); tvhdebug(LS_MPEGTS, "adding mux %s to scan queue weight %d flags %04X", - buf, weight, flags); + mm->mm_nicename, weight, flags); /* Add new entry */ mm->mm_scan_state = MM_SCAN_STATE_PEND; @@ -383,9 +379,7 @@ tsid_lookup: ((dvb_mux_t *)mm)->lm_tuning.u.dmc_fe_qpsk.polarisation == dvb_str2pol(pol) && ((dvb_mux_t *)mm)->lm_tuning.u.dmc_fe_qpsk.orbital_pos == satpos) { - char buf[256]; - mpegts_mux_nice_name(mm, buf, sizeof(buf)); - tvhinfo(LS_MPEGTS, "fastscan mux found '%s', set scan state 'PENDING'", buf); + tvhinfo(LS_MPEGTS, "fastscan mux found '%s', set scan state 'PENDING'", mm->mm_nicename); mpegts_mux_scan_state_set(mm, MM_SCAN_STATE_PEND); return; } diff --git a/src/input/mpegts/mpegts_service.c b/src/input/mpegts/mpegts_service.c index 9b682d659..0a0a90490 100644 --- a/src/input/mpegts/mpegts_service.c +++ b/src/input/mpegts/mpegts_service.c @@ -797,7 +797,6 @@ mpegts_service_create0 mpegts_mux_t *mm, uint16_t sid, uint16_t pmt_pid, htsmsg_t *conf ) { int r; - char buf[256]; mpegts_network_t *mn = mm->mm_network; time_t dispatch_clock = gclk(); @@ -847,8 +846,7 @@ mpegts_service_create0 service_make_nicename((service_t*)s); pthread_mutex_unlock(&s->s_stream_mutex); - mpegts_mux_nice_name(mm, buf, sizeof(buf)); - tvhdebug(LS_MPEGTS, "%s - add service %04X %s", buf, s->s_dvb_service_id, s->s_dvb_svcname); + tvhdebug(LS_MPEGTS, "%s - add service %04X %s", mm->mm_nicename, s->s_dvb_service_id, s->s_dvb_svcname); /* Bouquet */ mpegts_network_bouquet_trigger(mn, 1); @@ -1095,9 +1093,6 @@ mpegts_service_t * mpegts_service_create_raw ( mpegts_mux_t *mm ) { mpegts_service_t *s = calloc(1, sizeof(*s)); - char buf[256]; - - mpegts_mux_nice_name(mm, buf, sizeof(buf)); if (service_create0((service_t*)s, STYPE_RAW, &mpegts_service_raw_class, NULL, @@ -1133,10 +1128,10 @@ mpegts_service_create_raw ( mpegts_mux_t *mm ) pthread_mutex_lock(&s->s_stream_mutex); free(s->s_nicename); - s->s_nicename = strdup(buf); + s->s_nicename = strdup(mm->mm_nicename); pthread_mutex_unlock(&s->s_stream_mutex); - tvhdebug(LS_MPEGTS, "%s - add raw service", buf); + tvhdebug(LS_MPEGTS, "%s - add raw service", mm->mm_nicename); return s; } diff --git a/src/input/mpegts/mpegts_table.c b/src/input/mpegts/mpegts_table.c index fe9ed23d7..9a8f907b6 100644 --- a/src/input/mpegts/mpegts_table.c +++ b/src/input/mpegts/mpegts_table.c @@ -47,7 +47,6 @@ mpegts_table_consistency_check ( mpegts_mux_t *mm ) static void mpegts_table_fastswitch ( mpegts_mux_t *mm, mpegts_table_t *mtm ) { - char buf[256]; mpegts_table_t *mt; assert(mm == mtm->mt_mux); @@ -76,8 +75,7 @@ mpegts_table_fastswitch ( mpegts_mux_t *mm, mpegts_table_t *mtm ) pthread_mutex_unlock(&mm->mm_tables_lock); - mpegts_mux_nice_name(mm, buf, sizeof(buf)); - mpegts_mux_scan_done(mm, buf, 1); + mpegts_mux_scan_done(mm, mm->mm_nicename, 1); } void diff --git a/src/input/mpegts/mpegts_tsdebug.c b/src/input/mpegts/mpegts_tsdebug.c index 24ed6cdc1..599dcfb62 100644 --- a/src/input/mpegts/mpegts_tsdebug.c +++ b/src/input/mpegts/mpegts_tsdebug.c @@ -28,7 +28,6 @@ tsdebug_started_mux { extern char *tvheadend_tsdebug; static const char *tmpdir = "/tmp/tvheadend.tsdebug/"; - char buf[128]; char path[PATH_MAX]; struct stat st; if (!tvheadend_tsdebug && !stat(tmpdir, &st) && (st.st_mode & S_IFDIR) != 0) @@ -36,14 +35,13 @@ tsdebug_started_mux if (tvheadend_tsdebug && !strcmp(tvheadend_tsdebug, tmpdir) && stat(tmpdir, &st)) tvheadend_tsdebug = NULL; if (tvheadend_tsdebug) { - mpegts_mux_nice_name(mm, buf, sizeof(buf)); snprintf(path, sizeof(path), "%s/%s-%li-%p-mux.ts", tvheadend_tsdebug, - buf, (long)mono2sec(mclk()), mi); + mm->mm_nicename, (long)mono2sec(mclk()), mi); mm->mm_tsdebug_fd = tvh_open(path, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR); if (mm->mm_tsdebug_fd < 0) tvherror(LS_TSDEBUG, "unable to create file '%s' (%i)", path, errno); snprintf(path, sizeof(path), "%s/%s-%li-%p-input.ts", tvheadend_tsdebug, - buf, (long)mono2sec(mclk()), mi); + mm->mm_nicename, (long)mono2sec(mclk()), mi); mm->mm_tsdebug_fd2 = tvh_open(path, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR); if (mm->mm_tsdebug_fd2 < 0) tvherror(LS_TSDEBUG, "unable to create file '%s' (%i)", path, errno); diff --git a/src/input/mpegts/satip/satip_frontend.c b/src/input/mpegts/satip/satip_frontend.c index 25a920d28..0432f004a 100644 --- a/src/input/mpegts/satip/satip_frontend.c +++ b/src/input/mpegts/satip/satip_frontend.c @@ -729,11 +729,10 @@ satip_frontend_stop_mux { satip_frontend_t *lfe = (satip_frontend_t*)mi; satip_tune_req_t *tr; - char buf1[256], buf2[256]; + char buf1[256]; mi->mi_display_name(mi, buf1, sizeof(buf1)); - mpegts_mux_nice_name(mmi->mmi_mux, buf2, sizeof(buf2)); - tvhdebug(LS_SATIP, "%s - stopping %s", buf1, buf2); + tvhdebug(LS_SATIP, "%s - stopping %s", buf1, mmi->mmi_mux->mm_nicename); mtimer_disarm(&lfe->sf_monitor_timer); @@ -787,11 +786,10 @@ satip_frontend_start_mux satip_frontend_t *lfe = (satip_frontend_t*)mi; dvb_mux_t *lm = (dvb_mux_t *)mmi->mmi_mux; satip_tune_req_t *tr; - char buf1[256], buf2[256]; + char buf1[256]; lfe->mi_display_name((mpegts_input_t*)lfe, buf1, sizeof(buf1)); - mpegts_mux_nice_name(mmi->mmi_mux, buf2, sizeof(buf2)); - tvhdebug(LS_SATIP, "%s - starting %s", buf1, buf2); + tvhdebug(LS_SATIP, "%s - starting %s", buf1, lm->mm_nicename); if (!lfe->sf_device->sd_no_univ_lnb && (lm->lm_tuning.dmc_fe_delsys == DVB_SYS_DVBS || diff --git a/src/subscriptions.c b/src/subscriptions.c index 1922ef8b3..86f390823 100644 --- a/src/subscriptions.c +++ b/src/subscriptions.c @@ -188,7 +188,7 @@ subscription_sort(th_subscription_t *a, th_subscription_t *b) static void subscription_show_none(th_subscription_t *s) { - char buf[256], buf2[128]; + char buf[256]; size_t l = 0; tvh_strlcatf(buf, sizeof(buf), l, @@ -201,8 +201,7 @@ subscription_show_none(th_subscription_t *s) #if ENABLE_MPEGTS else if (s->ths_raw_service) { mpegts_service_t *ms = (mpegts_service_t *)s->ths_raw_service; - mpegts_mux_nice_name(ms->s_dvb_mux, buf2, sizeof(buf2)); - tvh_strlcatf(buf, sizeof(buf), l, " to mux \"%s\"", buf2); + tvh_strlcatf(buf, sizeof(buf), l, " to mux \"%s\"", ms->s_dvb_mux->mm_nicename); } #endif else { @@ -211,8 +210,7 @@ subscription_show_none(th_subscription_t *s) #if ENABLE_MPEGTS if (idnode_is_instance(&s->ths_service->s_id, &mpegts_service_class)) { mpegts_service_t *ms = (mpegts_service_t *)s->ths_service; - mpegts_mux_nice_name(ms->s_dvb_mux, buf2, sizeof(buf2)); - tvh_strlcatf(buf, sizeof(buf), l, " in mux \"%s\"", buf2); + tvh_strlcatf(buf, sizeof(buf), l, " in mux \"%s\"", ms->s_dvb_mux->mm_nicename); } #endif }