vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Thu Oct 27 21:38:58 2016 +0300| [8efecdc7c53ec844ce62600ed558620bf787fa75] | committer: Rémi Denis-Courmont
modules: drop stale cache entries There can only be one plugin file with a given path, so if the name matches but the size or time does not, we know the entry is stale and useless. Also print an error if it happens. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=8efecdc7c53ec844ce62600ed558620bf787fa75 --- src/modules/bank.c | 14 +++++++++++++- src/modules/cache.c | 10 ++-------- src/modules/modules.h | 5 +---- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/modules/bank.c b/src/modules/bank.c index 1065c1e..945c050 100644 --- a/src/modules/bank.c +++ b/src/modules/bank.c @@ -172,7 +172,19 @@ static int AllocatePluginFile (module_bank_t *bank, const char *abspath, /* Check our plugins cache first then load plugin if needed */ if (bank->mode == CACHE_USE) - plugin = vlc_cache_lookup(&bank->cache, relpath, st); + { + plugin = vlc_cache_lookup(&bank->cache, relpath); + + if (plugin->mtime != (int64_t)st->st_mtime + || plugin->size != (uint64_t)st->st_size) + { + msg_Err(bank->obj, "stale plugins cache: modified %s", + plugin->abspath); + vlc_plugin_destroy(plugin); + plugin = NULL; + } + } + if (plugin == NULL) { plugin = module_InitDynamic(bank->obj, abspath, true); diff --git a/src/modules/cache.c b/src/modules/cache.c index 088a3b5..9e0180e 100644 --- a/src/modules/cache.c +++ b/src/modules/cache.c @@ -726,19 +726,13 @@ out: /** * Looks up a plugin file in a table of cached plugins. */ -vlc_plugin_t *vlc_cache_lookup(vlc_plugin_t **cache, - const char *path, const struct stat *st) +vlc_plugin_t *vlc_cache_lookup(vlc_plugin_t **cache, const char *path) { vlc_plugin_t **pp = cache, *plugin; while ((plugin = *pp) != NULL) { - /* TODO: Preemptively delete plugins with matching name and different - * stats. This will save time in following look-ups. */ - if (plugin->path != NULL - && !strcmp(plugin->path, path) - && plugin->mtime == (int64_t)st->st_mtime - && plugin->size == (uint64_t)st->st_size) + if (plugin->path != NULL && !strcmp(plugin->path, path)) { *pp = plugin->next; plugin->next = NULL; diff --git a/src/modules/modules.h b/src/modules/modules.h index 2742e4f..65f720d 100644 --- a/src/modules/modules.h +++ b/src/modules/modules.h @@ -128,10 +128,7 @@ void module_Unload (module_handle_t); /* Plugins cache */ vlc_plugin_t *vlc_cache_load(vlc_object_t *, const char *, block_t **); - -struct stat; -vlc_plugin_t *vlc_cache_lookup(vlc_plugin_t **, - const char *relpath, const struct stat *st); +vlc_plugin_t *vlc_cache_lookup(vlc_plugin_t **, const char *relpath); int CacheAdd(vlc_plugin_t ***, size_t *, vlc_plugin_t *); void CacheSave(vlc_object_t *, const char *, vlc_plugin_t *const *, size_t); _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
