From 17389539a046f7231447d531ef7f3d131c1d7515 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Mon, 4 Sep 2006 22:26:24 -0700 Subject: [PATCH] Make cache reference counting more efficient. Eliminate need to reference cache object once per cached font, instead just count the number of fonts used from the cache and bump the reference count once by that amount. I think this makes this refernece technique efficient enough for use. --- src/fccache.c | 9 +++++++++ src/fccfg.c | 5 ++++- src/fcint.h | 3 +++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/fccache.c b/src/fccache.c index 69a29f2..77a303d 100644 --- a/src/fccache.c +++ b/src/fccache.c @@ -476,6 +476,15 @@ FcDirCacheMapFd (int fd, struct stat *fd_stat) return cache; } +void +FcDirCacheReference (FcCache *cache, int nref) +{ + FcCacheSkip *skip = FcCacheFindByAddr (cache); + + if (skip) + skip->ref += nref; +} + void FcDirCacheUnload (FcCache *cache) { diff --git a/src/fccfg.c b/src/fccfg.c index 1139744..d9502f0 100644 --- a/src/fccfg.c +++ b/src/fccfg.c @@ -239,6 +239,8 @@ FcConfigAddCache (FcConfig *config, FcCache *cache) fs = FcCacheSet (cache); if (fs) { + int nref = 0; + for (i = 0; i < fs->nfont; i++) { FcPattern *font = FcFontSetFont (fs, i); @@ -260,9 +262,10 @@ FcConfigAddCache (FcConfig *config, FcCache *cache) if (!FcConfigAcceptFont (config, font)) continue; - FcPatternReference (font); + nref++; FcFontSetAdd (config->fonts[FcSetSystem], font); } + FcDirCacheReference (cache, nref); } /* diff --git a/src/fcint.h b/src/fcint.h index a054219..7dab169 100644 --- a/src/fcint.h +++ b/src/fcint.h @@ -513,6 +513,9 @@ FcCacheObjectDereference (void *object); FcPrivate void FcCacheFini (void); +void +FcDirCacheReference (FcCache *cache, int nref); + /* fccfg.c */ FcPrivate FcBool -- 2.39.5