|
|
|
@ -22,20 +22,20 @@ INLINE void cookie_cache_state_cleanup(struct cookie_cache_state *s) {
|
|
|
|
|
void cookie_cache_init(struct cookie_cache *c) {
|
|
|
|
|
cookie_cache_state_init(&c->current);
|
|
|
|
|
cookie_cache_state_init(&c->old);
|
|
|
|
|
c->swap_time = timeval_from_us(rtpe_now).tv_sec;
|
|
|
|
|
c->swap_time_us = rtpe_now;
|
|
|
|
|
mutex_init(&c->lock);
|
|
|
|
|
cond_init(&c->cond);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* lock must be held */
|
|
|
|
|
static void __cookie_cache_check_swap(struct cookie_cache *c) {
|
|
|
|
|
if (timeval_from_us(rtpe_now).tv_sec - c->swap_time >= 30) {
|
|
|
|
|
if (timeval_from_us(rtpe_now).tv_sec - timeval_from_us(c->swap_time_us).tv_sec >= 30) {
|
|
|
|
|
g_hash_table_remove_all(c->old.cookies);
|
|
|
|
|
bencode_buffer_free(&c->old.buffer);
|
|
|
|
|
swap_ptrs(&c->old.cookies, &c->current.cookies);
|
|
|
|
|
c->old.buffer = c->current.buffer;
|
|
|
|
|
bencode_buffer_init(&c->current.buffer);
|
|
|
|
|
c->swap_time = timeval_from_us(rtpe_now).tv_sec;
|
|
|
|
|
c->swap_time_us = rtpe_now;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|