mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-03-05 08:00:30 +01:00
util: Fix race condition on libgcrypt initialization
Fixes intermittent Vulkan CTS failures within the test groups: dEQP-VK.api.object_management.multithreaded_per_thread_device dEQP-VK.api.object_management.multithreaded_per_thread_resources dEQP-VK.api.object_management.multithreaded_shared_resources Signed-off-by: Mark Janes <mark.a.janes@intel.com> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94904 Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
parent
2d5bd66e4f
commit
ade3108bb5
1 changed files with 11 additions and 8 deletions
|
|
@ -175,21 +175,24 @@ _mesa_sha1_final(struct mesa_sha1 *ctx, unsigned char result[20])
|
|||
#elif defined(HAVE_SHA1_IN_LIBGCRYPT) /* Use libgcrypt for SHA1 */
|
||||
|
||||
#include <gcrypt.h>
|
||||
#include "c11/threads.h"
|
||||
|
||||
static void _mesa_libgcrypt_init(void)
|
||||
{
|
||||
if (!gcry_check_version(NULL))
|
||||
return NULL;
|
||||
gcry_control(GCRYCTL_DISABLE_SECMEM, 0);
|
||||
gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0);
|
||||
}
|
||||
|
||||
struct mesa_sha1 *
|
||||
_mesa_sha1_init(void)
|
||||
{
|
||||
static int init;
|
||||
static once_flag flag = ONCE_FLAG_INIT;
|
||||
gcry_md_hd_t h;
|
||||
gcry_error_t err;
|
||||
|
||||
if (!init) {
|
||||
if (!gcry_check_version(NULL))
|
||||
return NULL;
|
||||
gcry_control(GCRYCTL_DISABLE_SECMEM, 0);
|
||||
gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0);
|
||||
init = 1;
|
||||
}
|
||||
call_once(&flag, _mesa_libgcrypt_init);
|
||||
|
||||
err = gcry_md_open(&h, GCRY_MD_SHA1, 0);
|
||||
if (err)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue