diff options
author | Timothy Arceri <[email protected]> | 2017-03-05 08:07:22 +1100 |
---|---|---|
committer | Timothy Arceri <[email protected]> | 2017-03-06 09:27:01 +1100 |
commit | 11f0efec2e615f5233defdd8ca9693c54ea49b1f (patch) | |
tree | cfb5552d261170689ca8a7f250fd8d399c8ff078 /src | |
parent | 175d4aa8f52a01dd21fb3774c9638a866da5dca8 (diff) |
util/disk_cache: support caches for multiple architectures
Previously we were deleting the entire cache if a user switched
between 32 and 64 bit applications.
V2: make the check more generic, it should now work with any
platform we are likely to support.
V3: Use suggestion from Emil to make even more generic/fix issue
with __ILP32__ not being declared on gcc for regular 32-bit builds.
Tested-by: Grazvydas Ignotas <[email protected]>
Tested-by: Dieter Nützel <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/util/disk_cache.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/util/disk_cache.c b/src/util/disk_cache.c index 198d90e4222..7f249399e0d 100644 --- a/src/util/disk_cache.c +++ b/src/util/disk_cache.c @@ -74,6 +74,23 @@ struct disk_cache { uint64_t max_size; }; +static const char * +get_arch_bitness_str(void) +{ + if (sizeof(void *) == 4) +#ifdef __ILP32__ + return "ilp-32"; +#else + return "32"; +#endif + if (sizeof(void *) == 8) + return "64"; + + /* paranoia check which will be dropped by the optimiser */ + assert(!"unknown_arch"); + return "unknown_arch"; +} + /* Create a directory named 'path' if it does not already exist. * * Returns: 0 if path already exists as a directory or if created. @@ -178,6 +195,15 @@ create_mesa_cache_dir(void *mem_ctx, const char *path, const char *timestamp, if (new_path == NULL) return NULL; + /* Create a parent architecture directory so that we don't remove cache + * files for other architectures. In theory we could share the cache + * between architectures but we have no way of knowing if they were created + * by a compatible Mesa version. + */ + new_path = concatenate_and_mkdir(mem_ctx, new_path, get_arch_bitness_str()); + if (new_path == NULL) + return NULL; + /* Remove cache directories for old Mesa versions */ remove_old_cache_directories(mem_ctx, new_path, timestamp); |