|
|
|
|
@ -37,7 +37,7 @@ static void __cookie_cache_check_swap(struct cookie_cache *c) {
|
|
|
|
|
cache_entry *cookie_cache_lookup(struct cookie_cache *c, const str *s) {
|
|
|
|
|
cache_entry *ret;
|
|
|
|
|
|
|
|
|
|
mutex_lock(&c->lock);
|
|
|
|
|
LOCK(&c->lock);
|
|
|
|
|
|
|
|
|
|
__cookie_cache_check_swap(c);
|
|
|
|
|
|
|
|
|
|
@ -63,28 +63,25 @@ restart:
|
|
|
|
|
// caller is required to call cookie_cache_insert or cookie_cache_remove
|
|
|
|
|
// before `s` runs out of scope
|
|
|
|
|
g_hash_table_replace(c->current.in_use, (void *) s, (void *) 0x1);
|
|
|
|
|
mutex_unlock(&c->lock);
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void cookie_cache_insert(struct cookie_cache *c, const str *s, const struct cache_entry *entry) {
|
|
|
|
|
mutex_lock(&c->lock);
|
|
|
|
|
LOCK(&c->lock);
|
|
|
|
|
g_hash_table_remove(c->current.in_use, s);
|
|
|
|
|
g_hash_table_remove(c->old.in_use, s);
|
|
|
|
|
g_hash_table_replace(c->current.cookies, str_dup(s), cache_entry_dup(entry));
|
|
|
|
|
g_hash_table_remove(c->old.cookies, s);
|
|
|
|
|
cond_broadcast(&c->cond);
|
|
|
|
|
mutex_unlock(&c->lock);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void cookie_cache_remove(struct cookie_cache *c, const str *s) {
|
|
|
|
|
mutex_lock(&c->lock);
|
|
|
|
|
LOCK(&c->lock);
|
|
|
|
|
g_hash_table_remove(c->current.in_use, s);
|
|
|
|
|
g_hash_table_remove(c->old.in_use, s);
|
|
|
|
|
g_hash_table_remove(c->current.cookies, s);
|
|
|
|
|
g_hash_table_remove(c->old.cookies, s);
|
|
|
|
|
cond_broadcast(&c->cond);
|
|
|
|
|
mutex_unlock(&c->lock);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void cookie_cache_cleanup(struct cookie_cache *c) {
|
|
|
|
|
|