On Tue 14 Feb 2017, Matt Turner wrote:

>  static bool
> -anv_get_function_timestamp(void *ptr, uint32_t* timestamp)
> +anv_device_get_cache_uuid(void *uuid)
>  {
> -   Dl_info info;
> -   struct stat st;
> -   if (!dladdr(ptr, &info) || !info.dli_fname)
> +   const struct note *note = build_id_find_nhdr("libvulkan_intel.so");
> +   if (!note)
>        return false;
>  
> -   if (stat(info.dli_fname, &st))
> +   unsigned len = build_id_length(note);
> +   if (len < VK_UUID_SIZE)
>        return false;
>  
> -   *timestamp = st.st_mtim.tv_sec;
> -   return true;
> -}
> -
> -static bool
> -anv_device_get_cache_uuid(void *uuid)
> -{
> -   uint32_t timestamp;
> -
> -   memset(uuid, 0, VK_UUID_SIZE);
> -   if (!anv_get_function_timestamp(anv_device_get_cache_uuid, &timestamp))
> +   unsigned char *build_id = malloc(len);
> +   if (!build_id)
>        return false;
>  
> -   snprintf(uuid, VK_UUID_SIZE, "anv-%d", timestamp);
> +   build_id_read(note, build_id);
> +
> +   memcpy(uuid, build_id, VK_UUID_SIZE);
> +   free(build_id);

The Vulkan spec frowns on memory allocations when not needed. If you
must allocate memory here, then it should be through the VkInstance
allocation callbacks. However, it's best to avoid the allocation by
adding a size_t parameter, à la snprintf, to build_id_read().

Otherwise, the patch looks good to me.

>     return true;
>  }
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to