From 1411d79e24f818bc8ea22268b66bb40a4091c79a Mon Sep 17 00:00:00 2001 From: Yonggang Luo Date: Tue, 18 Oct 2022 02:36:42 +0800 Subject: [PATCH] mapi: Use util_call_once to init exec_mem and mutex instead _MTX_INITIALIZER_NP Signed-off-by: Yonggang Luo Reviewed-by: Jesse Natalie Part-of: --- src/mapi/glapi/meson.build | 4 ++-- src/mapi/shared-glapi/meson.build | 2 +- src/mapi/u_execmem.c | 23 ++++++++++++++++------- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/mapi/glapi/meson.build b/src/mapi/glapi/meson.build index d823482f2b5..c14c28b1f26 100644 --- a/src/mapi/glapi/meson.build +++ b/src/mapi/glapi/meson.build @@ -81,7 +81,7 @@ libglapi_bridge = static_library( bridge_glapi_files, include_directories : [inc_mesa, inc_include, inc_src, inc_mapi], c_args : [c_msvc_compat_args, bridge_glapi_args], - dependencies : [dep_thread, dep_selinux, idep_mesautilc11], + dependencies : [dep_thread, dep_selinux, idep_mesautilc11, idep_mesautil], build_by_default : false, ) @@ -93,7 +93,7 @@ else static_glapi_files, include_directories : [inc_mesa, inc_include, inc_src, inc_mapi], c_args : [c_msvc_compat_args, static_glapi_args], - dependencies : [dep_thread, dep_selinux, idep_mesautilc11], + dependencies : [dep_thread, dep_selinux, idep_mesautilc11, idep_mesautil], build_by_default : false, ) endif diff --git a/src/mapi/shared-glapi/meson.build b/src/mapi/shared-glapi/meson.build index 26166d7ddbc..3db5646c7f4 100644 --- a/src/mapi/shared-glapi/meson.build +++ b/src/mapi/shared-glapi/meson.build @@ -54,7 +54,7 @@ libglapi = shared_library( gnu_symbol_visibility : 'hidden', link_args : [ld_args_gc_sections], include_directories : [inc_src, inc_include, inc_mapi], - dependencies : [dep_thread, dep_selinux, idep_mesautilc11], + dependencies : [dep_thread, dep_selinux, idep_mesautilc11, idep_mesautil], soversion : host_machine.system() == 'windows' ? '' : '0', version : '0.0.0', name_prefix : 'lib', diff --git a/src/mapi/u_execmem.c b/src/mapi/u_execmem.c index 60fe678e58c..4626c0f8b4a 100644 --- a/src/mapi/u_execmem.c +++ b/src/mapi/u_execmem.c @@ -33,12 +33,13 @@ #include "c11/threads.h" +#include "util/u_call_once.h" #include "u_execmem.h" #define EXEC_MAP_SIZE (4*1024) -static mtx_t exec_mutex = _MTX_INITIALIZER_NP; +static mtx_t exec_mutex; static unsigned int head = 0; @@ -76,9 +77,8 @@ init_map(void) } #endif - if (!exec_mem) - exec_mem = mmap(NULL, EXEC_MAP_SIZE, PROT_EXEC | PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + exec_mem = mmap(NULL, EXEC_MAP_SIZE, PROT_EXEC | PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); return (exec_mem != MAP_FAILED); } @@ -117,6 +117,14 @@ init_map(void) #endif +static void +u_execmem_init_once(void) +{ + if (!init_map()) + exec_mem = NULL; + mtx_init(&exec_mutex, mtx_plain); +} + void * u_execmem_alloc(unsigned int size) { @@ -125,12 +133,13 @@ u_execmem_alloc(unsigned int size) return NULL; #else void *addr = NULL; + static util_once_flag once = UTIL_ONCE_FLAG_INIT; + util_call_once(&once, u_execmem_init_once); + if (exec_mem == NULL) + return NULL; mtx_lock(&exec_mutex); - if (!init_map()) - goto bail; - /* free space check, assumes no integer overflow */ if (head + size > EXEC_MAP_SIZE) goto bail;