Skip to content

Commit

Permalink
Fix cache_resize to keep old entry age
Browse files Browse the repository at this point in the history
Instead of using cache_insert do the update itself

Signed-off-by: Orit Wasserman <owasserm@redhat.com>

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Juan Quintela <quintela@redhat.com>
  • Loading branch information
oritwas authored and Juan Quintela committed Mar 11, 2013
1 parent 0db65d6 commit a0ee203
Showing 1 changed file with 9 additions and 10 deletions.
19 changes: 9 additions & 10 deletions page_cache.c
Original file line number Diff line number Diff line change
Expand Up @@ -192,18 +192,17 @@ int64_t cache_resize(PageCache *cache, int64_t new_num_pages)
if (old_it->it_addr != -1) {
/* check for collision, if there is, keep MRU page */
new_it = cache_get_by_addr(new_cache, old_it->it_addr);
if (new_it->it_data) {
if (new_it->it_data && new_it->it_age >= old_it->it_age) {
/* keep the MRU page */
if (new_it->it_age >= old_it->it_age) {
g_free(old_it->it_data);
} else {
g_free(new_it->it_data);
new_it->it_data = old_it->it_data;
new_it->it_age = old_it->it_age;
new_it->it_addr = old_it->it_addr;
}
g_free(old_it->it_data);
} else {
cache_insert(new_cache, old_it->it_addr, old_it->it_data);
if (!new_it->it_data) {
new_cache->num_items++;
}
g_free(new_it->it_data);
new_it->it_data = old_it->it_data;
new_it->it_age = old_it->it_age;
new_it->it_addr = old_it->it_addr;
}
}
}
Expand Down

0 comments on commit a0ee203

Please sign in to comment.