<p dir="ltr"><br>
On Apr 12, 2016 3:10 PM, "Mark Janes" <<a href="mailto:mark.a.janes@intel.com">mark.a.janes@intel.com</a>> wrote:<br>
><br>
> Fixes intermittent Vulkan CTS failures within the test groups:<br>
> dEQP-VK.api.object_management.multithreaded_per_thread_device<br>
> dEQP-VK.api.object_management.multithreaded_per_thread_resources<br>
> dEQP-VK.api.object_management.multithreaded_shared_resources</p>
<p dir="ltr">Thanks for figuring this out. Those failures have been bothering me for a while (not as much as they higher you, I'm sure) but I've never seen it on my local machine because I'm pretty sure I use libnettle for sha1.</p>
<p dir="ltr">Reviewed-by: Jason Ekstrand <<a href="mailto:jason@jlekstrand.net">jason@jlekstrand.net</a>></p>
<p dir="ltr">> Signed-off-by: Mark Janes <<a href="mailto:mark.a.janes@intel.com">mark.a.janes@intel.com</a>><br>
> Bugzilla: <a href="https://bugs.freedesktop.org/show_bug.cgi?id=94904">https://bugs.freedesktop.org/show_bug.cgi?id=94904</a><br>
> ---<br>
>  src/util/mesa-sha1.c | 19 +++++++++++--------<br>
>  1 file changed, 11 insertions(+), 8 deletions(-)<br>
><br>
> diff --git a/src/util/mesa-sha1.c b/src/util/mesa-sha1.c<br>
> index faa1c87..ca6b89b 100644<br>
> --- a/src/util/mesa-sha1.c<br>
> +++ b/src/util/mesa-sha1.c<br>
> @@ -175,21 +175,24 @@ _mesa_sha1_final(struct mesa_sha1 *ctx, unsigned char result[20])<br>
>  #elif defined(HAVE_SHA1_IN_LIBGCRYPT)   /* Use libgcrypt for SHA1 */<br>
><br>
>  #include <gcrypt.h><br>
> +#include "c11/threads.h"<br>
> +<br>
> +static void _mesa_libgcrypt_init(void)<br>
> +{<br>
> +   if (!gcry_check_version(NULL))<br>
> +      return NULL;<br>
> +   gcry_control(GCRYCTL_DISABLE_SECMEM, 0);<br>
> +   gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0);<br>
> +}<br>
><br>
>  struct mesa_sha1 *<br>
>  _mesa_sha1_init(void)<br>
>  {<br>
> -   static int init;<br>
> +   static once_flag flag = ONCE_FLAG_INIT;<br>
>     gcry_md_hd_t h;<br>
>     gcry_error_t err;<br>
><br>
> -   if (!init) {<br>
> -      if (!gcry_check_version(NULL))<br>
> -         return NULL;<br>
> -      gcry_control(GCRYCTL_DISABLE_SECMEM, 0);<br>
> -      gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0);<br>
> -      init = 1;<br>
> -   }<br>
> +   call_once(&flag, _mesa_libgcrypt_init);<br>
><br>
>     err = gcry_md_open(&h, GCRY_MD_SHA1, 0);<br>
>     if (err)<br>
> --<br>
> 2.8.0.rc3<br>
><br>
</p>