From: Jaroslav Kysela Date: Tue, 8 Mar 2016 17:26:30 +0000 (+0100) Subject: more running flag changes (atomic ops) X-Git-Tag: v4.2.1~929 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=eaf5a79010d79bac127b6f03426b626e08702012;p=thirdparty%2Ftvheadend.git more running flag changes (atomic ops) --- diff --git a/src/dbus.c b/src/dbus.c index b0cdfc220..bdc2f9c7e 100644 --- a/src/dbus.c +++ b/src/dbus.c @@ -65,7 +65,7 @@ dbus_emit_signal(const char *obj_name, const char *sig_name, htsmsg_t *msg) int unused __attribute__((unused)); size_t l; - if (!dbus_running) { + if (!atomic_get(&dbus_running)) { htsmsg_destroy(msg); return; } @@ -354,13 +354,13 @@ dbus_server_thread(void *aux) conn = dbus_create_session("org.tvheadend.server"); if (conn == NULL) { - dbus_running = 0; + atomic_set(&dbus_running, 0); return NULL; } notify = dbus_create_session("org.tvheadend.notify"); if (notify == NULL) { - dbus_running = 0; + atomic_set(&dbus_running, 0); dbus_connection_safe_close(conn); return NULL; } @@ -373,7 +373,7 @@ dbus_server_thread(void *aux) tvhpoll_add(poll, &ev, 1); memset(&ev, 0, sizeof(ev)); if (!dbus_connection_get_unix_fd(conn, &ev.fd)) { - dbus_running = 0; + atomic_set(&dbus_running, 0); tvhpoll_destroy(poll); dbus_connection_safe_close(notify); dbus_connection_safe_close(conn); @@ -383,11 +383,11 @@ dbus_server_thread(void *aux) ev.data.ptr = conn; tvhpoll_add(poll, &ev, 1); - while (dbus_running) { + while (atomic_get(&dbus_running)) { n = tvhpoll_wait(poll, &ev, 1, -1); if (n < 0) { - if (dbus_running && !ERRNO_AGAIN(errno)) + if (atomic_get(&dbus_running) && !ERRNO_AGAIN(errno)) tvherror("dbus", "tvhpoll_wait() error"); } else if (n == 0) { continue; @@ -449,7 +449,7 @@ dbus_server_init(int enabled, int session) if (enabled) { tvh_pipe(O_NONBLOCK, &dbus_pipe); dbus_threads_init_default(); - dbus_running = 1; + atomic_set(&dbus_running, 1); dbus_emit_signal_str("/main", "start", tvheadend_version); } } @@ -467,7 +467,7 @@ dbus_server_done(void) dbus_rpc_t *rpc; dbus_emit_signal_str("/main", "stop", "bye"); - dbus_running = 0; + atomic_set(&dbus_running, 0); if (dbus_pipe.wr > 0) { tvh_write(dbus_pipe.wr, "", 1); pthread_kill(dbus_tid, SIGTERM); diff --git a/src/epggrab.c b/src/epggrab.c index 3092640be..5b585c447 100644 --- a/src/epggrab.c +++ b/src/epggrab.c @@ -95,10 +95,10 @@ static void* _epggrab_internal_thread ( void* p ) ts.tv_sec = time(NULL) + 120; /* Time for other jobs */ - while (epggrab_running) { + while (atomic_get(&epggrab_running)) { pthread_mutex_lock(&epggrab_mutex); err = ETIMEDOUT; - while (epggrab_running) { + while (atomic_get(&epggrab_running)) { err = pthread_cond_timedwait(&epggrab_cond, &epggrab_mutex, &ts); if (err == ETIMEDOUT) break; } @@ -108,11 +108,11 @@ static void* _epggrab_internal_thread ( void* p ) time(&ts.tv_sec); - while (epggrab_running) { + while (atomic_get(&epggrab_running)) { /* Check for config change */ pthread_mutex_lock(&epggrab_mutex); - while (epggrab_running && confver == epggrab_confver) { + while (atomic_get(&epggrab_running) && confver == epggrab_confver) { err = pthread_cond_timedwait(&epggrab_cond, &epggrab_mutex, &ts); if (err == ETIMEDOUT) break; } @@ -126,7 +126,7 @@ static void* _epggrab_internal_thread ( void* p ) /* Run grabber(s) */ /* Note: this loop is not protected, assuming static boot allocation */ LIST_FOREACH(mod, &epggrab_modules, link) { - if (!epggrab_running) + if (!atomic_get(&epggrab_running)) break; if (mod->type == EPGGRAB_INT) _epggrab_module_grab((epggrab_module_int_t *)mod); @@ -420,7 +420,7 @@ void epggrab_init ( void ) epggrab_ota_post(); /* Start internal grab thread */ - epggrab_running = 1; + atomic_set(&epggrab_running, 1); tvhthread_create(&epggrab_tid, NULL, _epggrab_internal_thread, NULL, "epggrabi"); } @@ -431,7 +431,7 @@ void epggrab_done ( void ) { epggrab_module_t *mod; - epggrab_running = 0; + atomic_set(&epggrab_running, 0); pthread_cond_signal(&epggrab_cond); pthread_join(epggrab_tid, NULL); diff --git a/src/epggrab/otamux.c b/src/epggrab/otamux.c index 60bf4fd27..0d4d33dc0 100644 --- a/src/epggrab/otamux.c +++ b/src/epggrab/otamux.c @@ -328,7 +328,7 @@ epggrab_ota_register int save = 0; epggrab_ota_map_t *map; - if (!epggrab_ota_running) + if (!atomic_get(&epggrab_ota_running)) return NULL; if (ota == NULL) { @@ -698,7 +698,7 @@ epggrab_ota_service_add ( epggrab_ota_map_t *map, epggrab_ota_mux_t *ota, { epggrab_ota_svc_link_t *svcl; - if (uuid == NULL || !epggrab_ota_running) + if (uuid == NULL || !atomic_get(&epggrab_ota_running)) return; SKEL_ALLOC(epggrab_svc_link_skel); epggrab_svc_link_skel->uuid = (char *)uuid; @@ -718,7 +718,7 @@ void epggrab_ota_service_del ( epggrab_ota_map_t *map, epggrab_ota_mux_t *ota, epggrab_ota_svc_link_t *svcl, int save ) { - if (svcl == NULL || (!epggrab_ota_running && save)) + if (svcl == NULL || (!atomic_get(&epggrab_ota_running) && save)) return; epggrab_ota_service_trace(ota, svcl, "delete"); RB_REMOVE(&map->om_svcs, svcl, link); @@ -842,7 +842,7 @@ epggrab_ota_init ( void ) if (!S_ISDIR(st.st_mode)) hts_settings_remove("epggrab/otamux"); - epggrab_ota_running = 1; + atomic_set(&epggrab_ota_running, 1); /* Load config */ if ((c = hts_settings_load_r(1, "epggrab/otamux"))) { @@ -908,7 +908,7 @@ epggrab_ota_shutdown ( void ) { epggrab_ota_mux_t *ota; - epggrab_ota_running = 0; + atomic_set(&epggrab_ota_running, 0); while ((ota = TAILQ_FIRST(&epggrab_ota_active)) != NULL) epggrab_ota_free(&epggrab_ota_active, ota); while ((ota = TAILQ_FIRST(&epggrab_ota_pending)) != NULL) diff --git a/src/input/mpegts/satip/satip.c b/src/input/mpegts/satip/satip.c index 0c5ff585a..8397ab5db 100644 --- a/src/input/mpegts/satip/satip.c +++ b/src/input/mpegts/satip/satip.c @@ -1232,7 +1232,7 @@ satip_discovery_timer_cb(void *aux) { if (!tvheadend_is_running()) return; - if (!upnp_running) { + if (!atomic_get(&upnp_running)) { mtimer_arm_rel(&satip_discovery_timer, satip_discovery_timer_cb, NULL, sec2mono(1)); return; diff --git a/src/spawn.c b/src/spawn.c index 08c8e2177..feff168be 100644 --- a/src/spawn.c +++ b/src/spawn.c @@ -127,7 +127,7 @@ spawn_pipe_thread(void *aux) ev[1].data.ptr = &spawn_pipe_error; tvhpoll_add(efd, ev, 2); - while (spawn_pipe_running) { + while (atomic_get(&spawn_pipe_running)) { nfds = tvhpoll_wait(efd, ev, 2, 500); @@ -643,7 +643,7 @@ void spawn_init(void) { tvh_pipe(O_NONBLOCK, &spawn_pipe_info); tvh_pipe(O_NONBLOCK, &spawn_pipe_error); - spawn_pipe_running = 1; + atomic_set(&spawn_pipe_running, 1); pthread_create(&spawn_pipe_tid, NULL, spawn_pipe_thread, NULL); } @@ -651,7 +651,7 @@ void spawn_done(void) { spawn_t *s; - spawn_pipe_running = 0; + atomic_set(&spawn_pipe_running, 0); pthread_kill(spawn_pipe_tid, SIGTERM); pthread_join(spawn_pipe_tid, NULL); tvh_pipe_close(&spawn_pipe_error); diff --git a/src/tcp.c b/src/tcp.c index d45c26a49..16d744529 100644 --- a/src/tcp.c +++ b/src/tcp.c @@ -667,7 +667,7 @@ tcp_server_loop(void *aux) socklen_t slen; char c; - while(tcp_server_running) { + while(atomic_get(&tcp_server_running)) { r = tvhpoll_wait(tcp_server_poll, &ev, 1, -1); if(r < 0) { if (ERRNO_AGAIN(r)) @@ -1085,7 +1085,7 @@ tcp_server_init(void) ev.data.ptr = &tcp_server_pipe; tvhpoll_add(tcp_server_poll, &ev, 1); - tcp_server_running = 1; + atomic_set(&tcp_server_running, 1); tvhthread_create(&tcp_server_tid, NULL, tcp_server_loop, NULL, "tcp-loop"); } @@ -1097,7 +1097,7 @@ tcp_server_done(void) char c = 'E'; int64_t t; - tcp_server_running = 0; + atomic_set(&tcp_server_running, 0); tvh_write(tcp_server_pipe.wr, &c, 1); pthread_mutex_lock(&global_lock); diff --git a/src/upnp.c b/src/upnp.c index 10927e149..024bdf5be 100644 --- a/src/upnp.c +++ b/src/upnp.c @@ -88,7 +88,7 @@ upnp_send( htsbuf_queue_t *q, struct sockaddr_storage *storage, { upnp_data_t *data; - if (!upnp_running) + if (!atomic_get(&upnp_running)) return; data = calloc(1, sizeof(upnp_data_t)); htsbuf_queue_init(&data->queue, 0); @@ -158,7 +158,7 @@ upnp_thread( void *aux ) delay_ms = 0; - while (upnp_running && multicast->fd >= 0) { + while (atomic_get(&upnp_running) && multicast->fd >= 0) { r = tvhpoll_wait(poll, ev, 2, delay_ms ?: 1000); if (r == 0) /* timeout */ delay_ms = 0; @@ -224,7 +224,7 @@ upnp_thread( void *aux ) } error: - upnp_running = 0; + atomic_set(&upnp_running, 0); tvhpoll_destroy(poll); udp_close(unicast); udp_close(multicast); @@ -248,7 +248,7 @@ upnp_server_init(const char *bindaddr) pthread_mutex_init(&upnp_lock, NULL); TAILQ_INIT(&upnp_data_write); TAILQ_INIT(&upnp_services); - upnp_running = 1; + atomic_set(&upnp_running, 1); tvhthread_create(&upnp_tid, NULL, upnp_thread, (char *)bindaddr, "upnp"); } @@ -258,7 +258,7 @@ upnp_server_done(void) upnp_data_t *data; upnp_service_t *us; - upnp_running = 0; + atomic_set(&upnp_running, 0); pthread_kill(upnp_tid, SIGTERM); pthread_join(upnp_tid, NULL); while ((us = TAILQ_FIRST(&upnp_services)) != NULL) diff --git a/src/webui/comet.c b/src/webui/comet.c index c4425e490..a027d945d 100644 --- a/src/webui/comet.c +++ b/src/webui/comet.c @@ -246,7 +246,7 @@ comet_mailbox_poll(http_connection_t *hc, const char *remain, void *opaque) tvh_safe_usleep(100000); /* Always sleep 0.1 sec to avoid comet storms */ pthread_mutex_lock(&comet_mutex); - if (!comet_running) { + if (!atomic_get(&comet_running)) { pthread_mutex_unlock(&comet_mutex); return HTTP_STATUS_BAD_REQUEST; } @@ -270,7 +270,7 @@ comet_mailbox_poll(http_connection_t *hc, const char *remain, void *opaque) if (e == ETIMEDOUT) break; } while (ERRNO_AGAIN(e)); - if (!comet_running) { + if (!atomic_get(&comet_running)) { pthread_mutex_unlock(&comet_mutex); return 400; } @@ -338,7 +338,7 @@ comet_init(void) { pthread_mutex_lock(&comet_mutex); tvh_cond_init(&comet_cond); - comet_running = 1; + atomic_set(&comet_running, 1); pthread_mutex_unlock(&comet_mutex); http_path_add("/comet/poll", NULL, comet_mailbox_poll, ACCESS_WEB_INTERFACE); http_path_add("/comet/debug", NULL, comet_mailbox_dbg, ACCESS_WEB_INTERFACE); @@ -350,7 +350,7 @@ comet_done(void) comet_mailbox_t *cmb; pthread_mutex_lock(&comet_mutex); - comet_running = 0; + atomic_set(&comet_running, 0); while ((cmb = LIST_FIRST(&mailboxes)) != NULL) cmb_destroy(cmb); pthread_mutex_unlock(&comet_mutex); @@ -391,7 +391,7 @@ comet_mailbox_add_message(htsmsg_t *m, int isdebug, int rewrite) pthread_mutex_lock(&comet_mutex); - if (comet_running) { + if (atomic_get(&comet_running)) { LIST_FOREACH(cmb, &mailboxes, cmb_link) { if(isdebug && !cmb->cmb_debug)