mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-04-01 21:33:09 +02:00
Merge branch 'giomodule-cache' into 'master'
Fix giomodule.cache being wrongly considered stale Closes #2127 See merge request GNOME/glib!1560
This commit is contained in:
commit
d5513ef72c
@ -462,7 +462,7 @@ g_io_modules_scan_all_in_directory_with_scope (const char *dirname,
|
|||||||
GDir *dir;
|
GDir *dir;
|
||||||
GStatBuf statbuf;
|
GStatBuf statbuf;
|
||||||
char *data;
|
char *data;
|
||||||
time_t cache_mtime;
|
time_t cache_time;
|
||||||
GHashTable *cache;
|
GHashTable *cache;
|
||||||
|
|
||||||
if (!g_module_supported ())
|
if (!g_module_supported ())
|
||||||
@ -477,21 +477,24 @@ g_io_modules_scan_all_in_directory_with_scope (const char *dirname,
|
|||||||
cache = g_hash_table_new_full (g_str_hash, g_str_equal,
|
cache = g_hash_table_new_full (g_str_hash, g_str_equal,
|
||||||
g_free, (GDestroyNotify)g_strfreev);
|
g_free, (GDestroyNotify)g_strfreev);
|
||||||
|
|
||||||
cache_mtime = 0;
|
cache_time = 0;
|
||||||
if (g_stat (filename, &statbuf) == 0 &&
|
if (g_stat (filename, &statbuf) == 0 &&
|
||||||
g_file_get_contents (filename, &data, NULL, NULL))
|
g_file_get_contents (filename, &data, NULL, NULL))
|
||||||
{
|
{
|
||||||
char **lines;
|
char **lines;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
/* Cache mtime is the time the cache file was created, any file
|
/* cache_time is the time the cache file was created; we also take
|
||||||
* that has a ctime before this was created then and not modified
|
* into account the change time because in ostree based systems, all
|
||||||
* since then (userspace can't change ctime). Its possible to change
|
* system file have mtime equal to epoch 0.
|
||||||
* the ctime forward without changing the file content, by e.g.
|
*
|
||||||
* chmoding the file, but this is uncommon and will only cause us
|
* Any file that has a ctime before this was created then and not modified
|
||||||
* to not use the cache so will not cause bugs.
|
* since then (userspace can't change ctime). Its possible to change the
|
||||||
|
* ctime forward without changing the file content, by e.g. chmoding the
|
||||||
|
* file, but this is uncommon and will only cause us to not use the cache
|
||||||
|
* so will not cause bugs.
|
||||||
*/
|
*/
|
||||||
cache_mtime = statbuf.st_mtime;
|
cache_time = MAX(statbuf.st_mtime, statbuf.st_ctime);
|
||||||
|
|
||||||
lines = g_strsplit (data, "\n", -1);
|
lines = g_strsplit (data, "\n", -1);
|
||||||
g_free (data);
|
g_free (data);
|
||||||
@ -539,7 +542,7 @@ g_io_modules_scan_all_in_directory_with_scope (const char *dirname,
|
|||||||
extension_points = g_hash_table_lookup (cache, name);
|
extension_points = g_hash_table_lookup (cache, name);
|
||||||
if (extension_points != NULL &&
|
if (extension_points != NULL &&
|
||||||
g_stat (path, &statbuf) == 0 &&
|
g_stat (path, &statbuf) == 0 &&
|
||||||
statbuf.st_ctime <= cache_mtime)
|
statbuf.st_ctime <= cache_time)
|
||||||
{
|
{
|
||||||
/* Lazy load/init the library when first required */
|
/* Lazy load/init the library when first required */
|
||||||
for (i = 0; extension_points[i] != NULL; i++)
|
for (i = 0; extension_points[i] != NULL; i++)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user