]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
more running flag changes (atomic ops)
authorJaroslav Kysela <perex@perex.cz>
Tue, 8 Mar 2016 17:26:30 +0000 (18:26 +0100)
committerJaroslav Kysela <perex@perex.cz>
Tue, 8 Mar 2016 17:26:30 +0000 (18:26 +0100)
src/dbus.c
src/epggrab.c
src/epggrab/otamux.c
src/input/mpegts/satip/satip.c
src/spawn.c
src/tcp.c
src/upnp.c
src/webui/comet.c

index b0cdfc220184b22e4316a39c5e0d4fafa671c4ab..bdc2f9c7e65168c5a11056987982fc0d6d6c1fa2 100644 (file)
@@ -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);
index 3092640bedb2ba1e8e7a15750a16e0ee15becc4a..5b585c4479b7154bb417f688372bb56cc811fc20 100644 (file)
@@ -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);
 
index 60bf4fd27a87bbca89c0f2dd42393a5b09aa2e42..0d4d33dc0430162c8730582170c9eb17e0c7fe7e 100644 (file)
@@ -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)
index 0c5ff585a042583d874171891a5f5666ea73a667..8397ab5db5f2a828a061e54c1aec1ae7cd8b4e89 100644 (file)
@@ -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;
index 08c8e21779fd6b7b48617e1aa5b6a0d38a4767ec..feff168be67164d9c6b155d4aaf8055d3a4b734a 100644 (file)
@@ -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);
index d45c26a490fe7cae4e9421e356912c8944c80e9e..16d744529ebb8a4f8b45a1365b9f9df99f9fafb5 100644 (file)
--- 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);
index 10927e149ca52f7b3598dbf5d30dc7edc34d6834..024bdf5be6a7481a226eee709375953a286849fb 100644 (file)
@@ -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)
index c4425e4906a2caa3f913db61bd20d2fa36aa2ad7..a027d945dd360e6f830a5b7d1ff60567714d720a 100644 (file)
@@ -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)