summaryrefslogtreecommitdiffstats
path: root/src/util/disk_cache.c
diff options
context:
space:
mode:
authorTimothy Arceri <[email protected]>2017-03-05 08:07:22 +1100
committerTimothy Arceri <[email protected]>2017-03-06 09:27:01 +1100
commit11f0efec2e615f5233defdd8ca9693c54ea49b1f (patch)
treecfb5552d261170689ca8a7f250fd8d399c8ff078 /src/util/disk_cache.c
parent175d4aa8f52a01dd21fb3774c9638a866da5dca8 (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/util/disk_cache.c')
-rw-r--r--src/util/disk_cache.c26
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);