From: Behdad Esfahbod Date: Thu, 5 Feb 2009 07:46:16 +0000 (-0500) Subject: [cache] After writing cache to file, update the internal copy to reflect this X-Git-Tag: 2.7.0~101 X-Git-Url: https://git.wh0rd.org/?a=commitdiff_plain;h=b697fa2523a6d3fe091e14710d14720a9e051bf1;p=fontconfig.git [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. --- diff --git a/src/fccache.c b/src/fccache.c index f35304a..ba28ddc 100644 --- a/src/fccache.c +++ b/src/fccache.c @@ -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);