]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
ota epg grabber: handle better the error conditions (do not retry before one minute)
authorJaroslav Kysela <perex@perex.cz>
Wed, 10 Jan 2018 16:20:12 +0000 (17:20 +0100)
committerJaroslav Kysela <perex@perex.cz>
Wed, 10 Jan 2018 16:20:32 +0000 (17:20 +0100)
src/epggrab.h
src/epggrab/otamux.c

index e6fff9a0a226b97f4ca3ba664a8d5b7eb5c58c80..58e6b7513a10bd2428c1bf1a1596309ec78de92a 100644 (file)
@@ -219,6 +219,7 @@ struct epggrab_ota_mux
   uint8_t                            om_save;         ///< something changed
   mtimer_t                           om_timer;        ///< Per mux active timer
   mtimer_t                           om_data_timer;   ///< Any EPG data seen?
+  int64_t                            om_retry_time;   ///< Next time to retry
 
   char                              *om_force_modname;///< Force this module
 
index 5f9938ec03bd5d7fcb79bce815dc4cf4d09d8be3..d150b0aacd809ffc9a0577133e55346c2f4716e8 100644 (file)
@@ -474,7 +474,6 @@ epggrab_ota_kick_cb ( void *p )
   extern const idclass_t mpegts_mux_class;
   epggrab_ota_map_t *map;
   epggrab_ota_mux_t *om = TAILQ_FIRST(&epggrab_ota_pending);
-  epggrab_ota_mux_t *first = NULL;
   mpegts_mux_t *mm;
   char name[256];
   struct {
@@ -588,10 +587,9 @@ next_one:
       }
       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;
-      if (first == NULL)
-        first = om;
     } else {
       if (tvhtrace_enabled()) {
         mpegts_mux_nice_name(mm, name, sizeof(name));
@@ -612,7 +610,7 @@ next_one:
 
 done:
   om = TAILQ_FIRST(&epggrab_ota_pending);
-  if (networks_count < ARRAY_SIZE(networks) && om && first != om)
+  if (networks_count < ARRAY_SIZE(networks) && om && om->om_retry_time < mclk())
     goto next_one;
   if (kick)
     epggrab_ota_kick(64); /* a random number? */