static void _lru_flush(struct lru_tree_s *lru) { if (!lru) return; struct cached_element_s *elt = NULL; struct hashstr_s *k = NULL; while (lru_tree_get_last(lru, (void**)&k, (void**)&elt)) { lru_tree_steal_last(lru, (void**)&k, (void**)&elt); if (k) g_free(k); k = NULL; if (elt) g_free(elt); elt = NULL; } }
static guint _resolver_expire(struct lru_tree_s *lru, time_t oldest) { struct cached_element_s *elt = NULL; struct hashstr_s *k = NULL; guint count = 0; while (lru_tree_get_last(lru, (void**)&k, (void**)&elt)) { EXTRA_ASSERT(k != NULL); EXTRA_ASSERT(elt != NULL); if (oldest <= elt->use) break; lru_tree_steal_last(lru, (void**)&k, (void**)&elt); metautils_pfree0(&k, NULL); metautils_pfree0(&elt, NULL); ++ count; } return count; }
static void _task_expire_services_down (gpointer p) { (void) p; gchar *k = NULL; gpointer v = NULL; guint count = 0; gulong oldest = oio_ext_monotonic_seconds() - cs_down_services; SRV_DO(while (lru_tree_get_last(srv_down, (void**)&k, &v)) { EXTRA_ASSERT(k != NULL); EXTRA_ASSERT(v != NULL); gulong when = (gulong)v; if (when >= oldest) break; lru_tree_steal_last(srv_down, (void**)&k, &v); g_free(k); ++ count; });