diff options
author | Robin Watts <robin.watts@artifex.com> | 2013-04-25 17:07:24 +0100 |
---|---|---|
committer | Robin Watts <robin.watts@artifex.com> | 2013-04-26 14:42:54 +0100 |
commit | 6bbdb0f3e091ebc7579d6708beaac6bd0f1892e5 (patch) | |
tree | c363e077182fde75b391c84eff7438c9e695f0b5 | |
parent | d1a3e6b7b72f54f291f11a50cd5c043984126885 (diff) | |
download | mupdf-6bbdb0f3e091ebc7579d6708beaac6bd0f1892e5.tar.xz |
Fix SNAFU in the store handling.
When the store fills up, the existing code throws away items to
make room. Due to a silly oversight (not updating the 'size' after
each round of evictions) it keeps throwing away repeatedly until it
fails.
Fix that here. Should make the store more efficient.
-rw-r--r-- | fitz/res_store.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/fitz/res_store.c b/fitz/res_store.c index bfe7eedb..2cb16c7f 100644 --- a/fitz/res_store.c +++ b/fitz/res_store.c @@ -311,7 +311,8 @@ fz_store_item(fz_context *ctx, void *key, void *val_, unsigned int itemsize, fz_ while (size > store->max) { /* ensure_space may drop, then retake the lock */ - if (ensure_space(ctx, size - store->max) == 0) + int saved = ensure_space(ctx, size - store->max); + if (saved == 0) { /* Failed to free any space. */ /* If we are using the hash table, then we've already @@ -333,6 +334,7 @@ fz_store_item(fz_context *ctx, void *key, void *val_, unsigned int itemsize, fz_ val->refs--; return NULL; } + size -= saved; } } store->size += itemsize; |