summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimothy Arceri <tarceri@itsqueeze.com>2018-09-20 08:54:32 +1000
committerJuan A. Suarez Romero <jasuarez@igalia.com>2018-10-11 09:01:45 +0200
commit4cd7db4b04ce0bc23730198c6ad61dd50d3cf8c8 (patch)
tree0a5580ceeff3bbc5a3539c85f8ab36192d9dc06a
parentbf21df1bb532ec2eec2aa02c63290a86857bba50 (diff)
downloadmesa-4cd7db4b04ce0bc23730198c6ad61dd50d3cf8c8.tar.gz
util: disable cache if we have no build-id and timestamp is zero
Timestamp can be zero for example when Flatpak is used. In this case just disable the cache rather then segfaulting when incompatible cache items are loaded. V2: actually return false when mtime is 0. Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> (cherry picked from commit ea66bfda8801a0f5139c8e4655373117cdd7a1c0)
-rw-r--r--src/amd/vulkan/radv_device.c4
-rw-r--r--src/util/disk_cache.h9
2 files changed, 9 insertions, 4 deletions
diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index 5cc5ddb9c07..4ce98098b5c 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -61,10 +61,6 @@ radv_get_build_id(void *ptr, struct mesa_sha1 *ctx)
} else
#endif
if (disk_cache_get_function_timestamp(ptr, &timestamp)) {
- if (!timestamp) {
- fprintf(stderr, "radv: The provided filesystem timestamp for the cache is bogus!\n");
- }
-
_mesa_sha1_update(ctx, &timestamp, sizeof(timestamp));
} else
return false;
diff --git a/src/util/disk_cache.h b/src/util/disk_cache.h
index 50bd9f41ac4..c8685a53ed3 100644
--- a/src/util/disk_cache.h
+++ b/src/util/disk_cache.h
@@ -26,6 +26,7 @@
#ifdef HAVE_DLFCN_H
#include <dlfcn.h>
+#include <stdio.h>
#endif
#include <assert.h>
#include <stdint.h>
@@ -100,7 +101,15 @@ disk_cache_get_function_timestamp(void *ptr, uint32_t* timestamp)
if (stat(info.dli_fname, &st)) {
return false;
}
+
+ if (!st.st_mtime) {
+ fprintf(stderr, "Mesa: The provided filesystem timestamp for the cache "
+ "is bogus! Disabling On-disk cache.\n");
+ return false;
+ }
+
*timestamp = st.st_mtime;
+
return true;
}
#endif