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>
This commit is contained in:
Timothy Arceri 2018-09-20 08:54:32 +10:00
parent 0bdf7b1d0f
commit ea66bfda88
2 changed files with 9 additions and 4 deletions

View file

@ -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;

View file

@ -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