Commit b697fa25 authored by Behdad Esfahbod's avatar Behdad Esfahbod

[cache] After writing cache to file, update the internal copy to reflect this

Only do it for small caches though.  For large cache we'd better off loading
the cache file again, mmap()ing it.

Based on patch from Diego Santa Cruz.
parent ecce22d4
......@@ -844,6 +844,8 @@ FcDirCacheWrite (FcCache *cache, FcConfig *config)
FcStrList *list;
FcChar8 *cache_dir = NULL;
FcChar8 *test_dir;
FcCacheSkip *skip;
struct stat cache_stat;
int magic;
int written;
......@@ -929,6 +931,20 @@ FcDirCacheWrite (FcCache *cache, FcConfig *config)
close(fd);
if (!FcAtomicReplaceOrig(atomic))
goto bail4;
/* If the file is small, update the cache chain entry such that the
* new cache file is not read again. If it's large, we don't do that
* such that we reload it, using mmap, which is shared across processes.
*/
if (cache->size < FC_CACHE_MIN_MMAP &&
(skip = FcCacheFindByAddr (cache)) &&
FcStat (cache_hashed, &cache_stat))
{
skip->cache_dev = cache_stat.st_dev;
skip->cache_ino = cache_stat.st_ino;
skip->cache_mtime = cache_stat.st_mtime;
}
FcStrFree (cache_hashed);
FcAtomicUnlock (atomic);
FcAtomicDestroy (atomic);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment