commit - 0259f38d36d8538ee723be82e20e5ccf29fcd385
commit + 4b4c3458436c646c06d295cc56e990eef9897c6f
blob - d39a1bbb0a2096692f5b9ee17498f9a45c9ebaf0
blob + 336b1f37a0f31df70ee9c3a914bfb5d384432cab
--- mcache.c
+++ mcache.c
[LINE_PRE_END] = "```",
};
+static struct timeval tv = { 60, 0 };
+static struct event timerev;
+
struct mcache {
struct ohash h;
size_t npages;
} mcache;
struct mcache_entry {
+ time_t ts;
const char *parser_name;
int trust;
struct evbuffer *evb;
free(e);
}
+static void
+clean_old_entries(int fd, short ev, void *data)
+{
+ struct mcache_entry *e;
+ unsigned int i;
+ time_t treshold;
+
+ treshold = time(NULL) - 15 * 60;
+
+ for (e = ohash_first(&mcache.h, &i); e != NULL; e = ohash_next(&mcache.h, &i))
+ if (e->ts < treshold)
+ mcache_free_entry(e->url);
+
+ evtimer_add(&timerev, &tv);
+}
+
void
mcache_init(void)
{
};
ohash_init(&mcache.h, 5, &info);
+
+ evtimer_set(&timerev, clean_old_entries, NULL);
}
int
if ((e = calloc(1, len)) == NULL)
return -1;
+ e->ts = time(NULL);
e->parser_name = tab->buffer.page.name;
e->trust = tab->trust;
memcpy(e->url, url, l);
mcache.npages++;
mcache.tot += EVBUFFER_LENGTH(e->evb);
+ if (!evtimer_pending(&timerev, NULL))
+ evtimer_add(&timerev, &tv);
+
return 0;
err: