[Mesa-dev] [PATCH 1/5] egl/main: use c11/threads' mutex directly

Emil Velikov emil.l.velikov at gmail.com
Fri Mar 6 09:05:45 PST 2015


Hi all,

Just accidently pushed the series to master. I'll revert them in a second.

-Emil


On 06/03/15 16:54, Emil Velikov wrote:
> Remove the inline wrappers/abstraction layer.
> 
> Signed-off-by: Emil Velikov <emil.l.velikov at gmail.com>
> ---
>  src/egl/main/Makefile.sources |  1 -
>  src/egl/main/eglapi.c         | 14 +++++----
>  src/egl/main/eglcurrent.c     | 13 ++++-----
>  src/egl/main/egldisplay.c     | 13 +++++----
>  src/egl/main/egldisplay.h     |  4 +--
>  src/egl/main/egldriver.c      |  8 +++---
>  src/egl/main/eglglobals.c     |  9 +++---
>  src/egl/main/eglglobals.h     |  4 +--
>  src/egl/main/egllog.c         | 18 ++++++------
>  src/egl/main/eglmutex.h       | 66 -------------------------------------------
>  src/egl/main/eglscreen.c      |  8 +++---
>  11 files changed, 47 insertions(+), 111 deletions(-)
>  delete mode 100644 src/egl/main/eglmutex.h
> 
> diff --git a/src/egl/main/Makefile.sources b/src/egl/main/Makefile.sources
> index 6a917e2..75f060a 100644
> --- a/src/egl/main/Makefile.sources
> +++ b/src/egl/main/Makefile.sources
> @@ -26,7 +26,6 @@ LIBEGL_C_FILES := \
>  	eglmisc.h \
>  	eglmode.c \
>  	eglmode.h \
> -	eglmutex.h \
>  	eglscreen.c \
>  	eglscreen.h \
>  	eglstring.c \
> diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c
> index 2258830..a74efcd 100644
> --- a/src/egl/main/eglapi.c
> +++ b/src/egl/main/eglapi.c
> @@ -87,6 +87,8 @@
>  #include <stdlib.h>
>  #include <string.h>
>  #include "c99_compat.h"
> +#include "c11/threads.h"
> +#include "eglcompiler.h"
>  
>  #include "eglglobals.h"
>  #include "eglcontext.h"
> @@ -275,7 +277,7 @@ _eglLockDisplay(EGLDisplay display)
>  {
>     _EGLDisplay *dpy = _eglLookupDisplay(display);
>     if (dpy)
> -      _eglLockMutex(&dpy->Mutex);
> +      mtx_lock(&dpy->Mutex);
>     return dpy;
>  }
>  
> @@ -286,7 +288,7 @@ _eglLockDisplay(EGLDisplay display)
>  static inline void
>  _eglUnlockDisplay(_EGLDisplay *dpy)
>  {
> -   _eglUnlockMutex(&dpy->Mutex);
> +   mtx_unlock(&dpy->Mutex);
>  }
>  
>  
> @@ -896,7 +898,7 @@ eglWaitClient(void)
>        RETURN_EGL_SUCCESS(NULL, EGL_TRUE);
>  
>     disp = ctx->Resource.Display;
> -   _eglLockMutex(&disp->Mutex);
> +   mtx_lock(&disp->Mutex);
>  
>     /* let bad current context imply bad current surface */
>     if (_eglGetContextHandle(ctx) == EGL_NO_CONTEXT ||
> @@ -942,7 +944,7 @@ eglWaitNative(EGLint engine)
>        RETURN_EGL_SUCCESS(NULL, EGL_TRUE);
>  
>     disp = ctx->Resource.Display;
> -   _eglLockMutex(&disp->Mutex);
> +   mtx_lock(&disp->Mutex);
>  
>     /* let bad current context imply bad current surface */
>     if (_eglGetContextHandle(ctx) == EGL_NO_CONTEXT ||
> @@ -1457,10 +1459,10 @@ eglReleaseThread(void)
>  
>              t->CurrentAPIIndex = i;
>  
> -            _eglLockMutex(&disp->Mutex);
> +            mtx_lock(&disp->Mutex);
>              drv = disp->Driver;
>              (void) drv->API.MakeCurrent(drv, disp, NULL, NULL, NULL);
> -            _eglUnlockMutex(&disp->Mutex);
> +            mtx_unlock(&disp->Mutex);
>           }
>        }
>  
> diff --git a/src/egl/main/eglcurrent.c b/src/egl/main/eglcurrent.c
> index 3d49641..dc32ed4 100644
> --- a/src/egl/main/eglcurrent.c
> +++ b/src/egl/main/eglcurrent.c
> @@ -31,7 +31,6 @@
>  #include "c99_compat.h"
>  
>  #include "egllog.h"
> -#include "eglmutex.h"
>  #include "eglcurrent.h"
>  #include "eglglobals.h"
>  
> @@ -47,7 +46,7 @@ static _EGLThreadInfo dummy_thread = _EGL_THREAD_INFO_INITIALIZER;
>  #if HAVE_PTHREAD
>  #include <pthread.h>
>  
> -static _EGLMutex _egl_TSDMutex = _EGL_MUTEX_INITIALIZER;
> +static mtx_t _egl_TSDMutex = _MTX_INITIALIZER_NP;
>  static EGLBoolean _egl_TSDInitialized;
>  static pthread_key_t _egl_TSD;
>  static void (*_egl_FreeTSD)(_EGLThreadInfo *);
> @@ -76,7 +75,7 @@ static inline _EGLThreadInfo *_eglGetTSD(void)
>  
>  static inline void _eglFiniTSD(void)
>  {
> -   _eglLockMutex(&_egl_TSDMutex);
> +   mtx_lock(&_egl_TSDMutex);
>     if (_egl_TSDInitialized) {
>        _EGLThreadInfo *t = _eglGetTSD();
>  
> @@ -85,18 +84,18 @@ static inline void _eglFiniTSD(void)
>           _egl_FreeTSD((void *) t);
>        pthread_key_delete(_egl_TSD);
>     }
> -   _eglUnlockMutex(&_egl_TSDMutex);
> +   mtx_unlock(&_egl_TSDMutex);
>  }
>  
>  static inline EGLBoolean _eglInitTSD(void (*dtor)(_EGLThreadInfo *))
>  {
>     if (!_egl_TSDInitialized) {
> -      _eglLockMutex(&_egl_TSDMutex);
> +      mtx_lock(&_egl_TSDMutex);
>  
>        /* check again after acquiring lock */
>        if (!_egl_TSDInitialized) {
>           if (pthread_key_create(&_egl_TSD, (void (*)(void *)) dtor) != 0) {
> -            _eglUnlockMutex(&_egl_TSDMutex);
> +            mtx_unlock(&_egl_TSDMutex);
>              return EGL_FALSE;
>           }
>           _egl_FreeTSD = dtor;
> @@ -104,7 +103,7 @@ static inline EGLBoolean _eglInitTSD(void (*dtor)(_EGLThreadInfo *))
>           _egl_TSDInitialized = EGL_TRUE;
>        }
>  
> -      _eglUnlockMutex(&_egl_TSDMutex);
> +      mtx_unlock(&_egl_TSDMutex);
>     }
>  
>     return EGL_TRUE;
> diff --git a/src/egl/main/egldisplay.c b/src/egl/main/egldisplay.c
> index a167ae5..b7a5b8f 100644
> --- a/src/egl/main/egldisplay.c
> +++ b/src/egl/main/egldisplay.c
> @@ -35,13 +35,14 @@
>  #include <assert.h>
>  #include <stdlib.h>
>  #include <string.h>
> +#include "c11/threads.h"
> +
>  #include "eglcontext.h"
>  #include "eglcurrent.h"
>  #include "eglsurface.h"
>  #include "egldisplay.h"
>  #include "egldriver.h"
>  #include "eglglobals.h"
> -#include "eglmutex.h"
>  #include "egllog.h"
>  
>  /* Includes for _eglNativePlatformDetectNativeDisplay */
> @@ -260,7 +261,7 @@ _eglFindDisplay(_EGLPlatformType plat, void *plat_dpy)
>     if (plat == _EGL_INVALID_PLATFORM)
>        return NULL;
>  
> -   _eglLockMutex(_eglGlobal.Mutex);
> +   mtx_lock(_eglGlobal.Mutex);
>  
>     /* search the display list first */
>     dpy = _eglGlobal.DisplayList;
> @@ -274,7 +275,7 @@ _eglFindDisplay(_EGLPlatformType plat, void *plat_dpy)
>     if (!dpy) {
>        dpy = calloc(1, sizeof(_EGLDisplay));
>        if (dpy) {
> -         _eglInitMutex(&dpy->Mutex);
> +         mtx_init(&dpy->Mutex, mtx_plain);
>           dpy->Platform = plat;
>           dpy->PlatformDisplay = plat_dpy;
>  
> @@ -284,7 +285,7 @@ _eglFindDisplay(_EGLPlatformType plat, void *plat_dpy)
>        }
>     }
>  
> -   _eglUnlockMutex(_eglGlobal.Mutex);
> +   mtx_unlock(_eglGlobal.Mutex);
>  
>     return dpy;
>  }
> @@ -344,14 +345,14 @@ _eglCheckDisplayHandle(EGLDisplay dpy)
>  {
>     _EGLDisplay *cur;
>  
> -   _eglLockMutex(_eglGlobal.Mutex);
> +   mtx_lock(_eglGlobal.Mutex);
>     cur = _eglGlobal.DisplayList;
>     while (cur) {
>        if (cur == (_EGLDisplay *) dpy)
>           break;
>        cur = cur->Next;
>     }
> -   _eglUnlockMutex(_eglGlobal.Mutex);
> +   mtx_unlock(_eglGlobal.Mutex);
>     return (cur != NULL);
>  }
>  
> diff --git a/src/egl/main/egldisplay.h b/src/egl/main/egldisplay.h
> index 9c3c8c7..5a845d8 100644
> --- a/src/egl/main/egldisplay.h
> +++ b/src/egl/main/egldisplay.h
> @@ -32,10 +32,10 @@
>  #define EGLDISPLAY_INCLUDED
>  
>  #include "c99_compat.h"
> +#include "c11/threads.h"
>  
>  #include "egltypedefs.h"
>  #include "egldefines.h"
> -#include "eglmutex.h"
>  #include "eglarray.h"
>  
>  
> @@ -132,7 +132,7 @@ struct _egl_display
>     /* used to link displays */
>     _EGLDisplay *Next;
>  
> -   _EGLMutex Mutex;
> +   mtx_t Mutex;
>  
>     _EGLPlatformType Platform; /**< The type of the platform display */
>     void *PlatformDisplay;     /**< A pointer to the platform display */
> diff --git a/src/egl/main/egldriver.c b/src/egl/main/egldriver.c
> index e6a61f3..6983af9 100644
> --- a/src/egl/main/egldriver.c
> +++ b/src/egl/main/egldriver.c
> @@ -37,13 +37,13 @@
>  #include <string.h>
>  #include <stdio.h>
>  #include <stdlib.h>
> +#include "c11/threads.h"
>  
>  #include "eglstring.h"
>  #include "egldefines.h"
>  #include "egldisplay.h"
>  #include "egldriver.h"
>  #include "egllog.h"
> -#include "eglmutex.h"
>  
>  #if defined(_EGL_OS_UNIX)
>  #include <dlfcn.h>
> @@ -63,7 +63,7 @@ typedef struct _egl_module {
>     _EGLDriver *Driver;
>  } _EGLModule;
>  
> -static _EGLMutex _eglModuleMutex = _EGL_MUTEX_INITIALIZER;
> +static mtx_t _eglModuleMutex = _MTX_INITIALIZER_NP;
>  static _EGLArray *_eglModules;
>  
>  const struct {
> @@ -616,7 +616,7 @@ _eglMatchDriver(_EGLDisplay *dpy, EGLBoolean test_only)
>  
>     assert(!dpy->Initialized);
>  
> -   _eglLockMutex(&_eglModuleMutex);
> +   mtx_lock(&_eglModuleMutex);
>  
>     /* set options */
>     dpy->Options.TestOnly = test_only;
> @@ -628,7 +628,7 @@ _eglMatchDriver(_EGLDisplay *dpy, EGLBoolean test_only)
>        best_drv = _eglMatchAndInitialize(dpy);
>     }
>  
> -   _eglUnlockMutex(&_eglModuleMutex);
> +   mtx_unlock(&_eglModuleMutex);
>  
>     if (best_drv) {
>        _eglLog(_EGL_DEBUG, "the best driver is %s%s",
> diff --git a/src/egl/main/eglglobals.c b/src/egl/main/eglglobals.c
> index 56fe9e2..129bf29 100644
> --- a/src/egl/main/eglglobals.c
> +++ b/src/egl/main/eglglobals.c
> @@ -30,13 +30,14 @@
>  
>  #include <stdlib.h>
>  #include <assert.h>
> +#include "c11/threads.h"
> +
>  #include "eglglobals.h"
>  #include "egldisplay.h"
>  #include "egldriver.h"
> -#include "eglmutex.h"
>  
>  
> -static _EGLMutex _eglGlobalMutex = _EGL_MUTEX_INITIALIZER;
> +static mtx_t _eglGlobalMutex = _MTX_INITIALIZER_NP;
>  
>  struct _egl_global _eglGlobal =
>  {
> @@ -84,7 +85,7 @@ _eglAddAtExitCall(void (*func)(void))
>     if (func) {
>        static EGLBoolean registered = EGL_FALSE;
>  
> -      _eglLockMutex(_eglGlobal.Mutex);
> +      mtx_lock(_eglGlobal.Mutex);
>  
>        if (!registered) {
>           atexit(_eglAtExit);
> @@ -94,6 +95,6 @@ _eglAddAtExitCall(void (*func)(void))
>        assert(_eglGlobal.NumAtExitCalls < ARRAY_SIZE(_eglGlobal.AtExitCalls));
>        _eglGlobal.AtExitCalls[_eglGlobal.NumAtExitCalls++] = func;
>  
> -      _eglUnlockMutex(_eglGlobal.Mutex);
> +      mtx_unlock(_eglGlobal.Mutex);
>     }
>  }
> diff --git a/src/egl/main/eglglobals.h b/src/egl/main/eglglobals.h
> index a8cf6d6..04b9609 100644
> --- a/src/egl/main/eglglobals.h
> +++ b/src/egl/main/eglglobals.h
> @@ -32,9 +32,9 @@
>  #define EGLGLOBALS_INCLUDED
>  
>  #include <stdbool.h>
> +#include "c11/threads.h"
>  
>  #include "egltypedefs.h"
> -#include "eglmutex.h"
>  
>  
>  /**
> @@ -42,7 +42,7 @@
>   */
>  struct _egl_global
>  {
> -   _EGLMutex *Mutex;
> +   mtx_t *Mutex;
>  
>     /* the list of all displays */
>     _EGLDisplay *DisplayList;
> diff --git a/src/egl/main/egllog.c b/src/egl/main/egllog.c
> index babab07..1877d8b 100644
> --- a/src/egl/main/egllog.c
> +++ b/src/egl/main/egllog.c
> @@ -38,24 +38,24 @@
>  #include <stdarg.h>
>  #include <stdio.h>
>  #include <stdlib.h>
> +#include "c11/threads.h"
>  
>  #include "egllog.h"
>  #include "eglstring.h"
> -#include "eglmutex.h"
>  
>  #define MAXSTRING 1000
>  #define FALLBACK_LOG_LEVEL _EGL_WARNING
>  
>  
>  static struct {
> -   _EGLMutex mutex;
> +   mtx_t mutex;
>  
>     EGLBoolean initialized;
>     EGLint level;
>     _EGLLogProc logger;
>     EGLint num_messages;
>  } logging = {
> -   _EGL_MUTEX_INITIALIZER,
> +   _MTX_INITIALIZER_NP,
>     EGL_FALSE,
>     FALLBACK_LOG_LEVEL,
>     NULL,
> @@ -82,7 +82,7 @@ _eglSetLogProc(_EGLLogProc logger)
>  {
>     EGLint num_messages = 0;
>  
> -   _eglLockMutex(&logging.mutex);
> +   mtx_lock(&logging.mutex);
>  
>     if (logging.logger != logger) {
>        logging.logger = logger;
> @@ -91,7 +91,7 @@ _eglSetLogProc(_EGLLogProc logger)
>        logging.num_messages = 0;
>     }
>  
> -   _eglUnlockMutex(&logging.mutex);
> +   mtx_unlock(&logging.mutex);
>  
>     if (num_messages)
>        _eglLog(_EGL_DEBUG,
> @@ -111,9 +111,9 @@ _eglSetLogLevel(EGLint level)
>     case _EGL_WARNING:
>     case _EGL_INFO:
>     case _EGL_DEBUG:
> -      _eglLockMutex(&logging.mutex);
> +      mtx_lock(&logging.mutex);
>        logging.level = level;
> -      _eglUnlockMutex(&logging.mutex);
> +      mtx_unlock(&logging.mutex);
>        break;
>     default:
>        break;
> @@ -188,7 +188,7 @@ _eglLog(EGLint level, const char *fmtStr, ...)
>     if (level > logging.level || level < 0)
>        return;
>  
> -   _eglLockMutex(&logging.mutex);
> +   mtx_lock(&logging.mutex);
>  
>     if (logging.logger) {
>        va_start(args, fmtStr);
> @@ -201,7 +201,7 @@ _eglLog(EGLint level, const char *fmtStr, ...)
>        logging.num_messages++;
>     }
>  
> -   _eglUnlockMutex(&logging.mutex);
> +   mtx_unlock(&logging.mutex);
>  
>     if (level == _EGL_FATAL)
>        exit(1); /* or abort()? */
> diff --git a/src/egl/main/eglmutex.h b/src/egl/main/eglmutex.h
> deleted file mode 100644
> index b58f0e3..0000000
> --- a/src/egl/main/eglmutex.h
> +++ /dev/null
> @@ -1,66 +0,0 @@
> -/**************************************************************************
> - *
> - * Copyright 2009 Chia-I Wu <olvaffe at gmail.com>
> - * All Rights Reserved.
> - *
> - * Permission is hereby granted, free of charge, to any person obtaining a
> - * copy of this software and associated documentation files (the
> - * "Software"), to deal in the Software without restriction, including
> - * without limitation the rights to use, copy, modify, merge, publish,
> - * distribute, sub license, and/or sell copies of the Software, and to
> - * permit persons to whom the Software is furnished to do so, subject to
> - * the following conditions:
> - *
> - * The above copyright notice and this permission notice (including the
> - * next paragraph) shall be included in all copies or substantial portions
> - * of the Software.
> - *
> - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
> - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
> - * DEALINGS IN THE SOFTWARE.
> - *
> - **************************************************************************/
> -
> -
> -#ifndef EGLMUTEX_INCLUDED
> -#define EGLMUTEX_INCLUDED
> -
> -#include "c99_compat.h"
> -
> -#include "eglcompiler.h"
> -
> -#include "c11/threads.h"
> -
> -typedef mtx_t _EGLMutex;
> -
> -static inline void _eglInitMutex(_EGLMutex *m)
> -{
> -   mtx_init(m, mtx_plain);
> -}
> -
> -static inline void
> -_eglDestroyMutex(_EGLMutex *m)
> -{
> -   mtx_destroy(m);
> -}
> -
> -static inline void
> -_eglLockMutex(_EGLMutex *m)
> -{
> -   mtx_lock(m);
> -}
> -
> -static inline void
> -_eglUnlockMutex(_EGLMutex *m)
> -{
> -   mtx_unlock(m);
> -}
> -
> -#define _EGL_MUTEX_INITIALIZER _MTX_INITIALIZER_NP
> -
> -
> -#endif /* EGLMUTEX_INCLUDED */
> diff --git a/src/egl/main/eglscreen.c b/src/egl/main/eglscreen.c
> index b8f2b39..42ac621 100644
> --- a/src/egl/main/eglscreen.c
> +++ b/src/egl/main/eglscreen.c
> @@ -44,20 +44,20 @@
>  #include <assert.h>
>  #include <stdlib.h>
>  #include <string.h>
> +#include "c11/threads.h"
>  
>  #include "egldisplay.h"
>  #include "eglcurrent.h"
>  #include "eglmode.h"
>  #include "eglsurface.h"
>  #include "eglscreen.h"
> -#include "eglmutex.h"
>  
>  
>  #ifdef EGL_MESA_screen_surface
>  
>  
>  /* ugh, no atomic op? */
> -static _EGLMutex _eglNextScreenHandleMutex = _EGL_MUTEX_INITIALIZER;
> +static mtx_t _eglNextScreenHandleMutex = _MTX_INITIALIZER_NP;
>  static EGLScreenMESA _eglNextScreenHandle = 1;
>  
>  
> @@ -70,10 +70,10 @@ _eglAllocScreenHandle(void)
>  {
>     EGLScreenMESA s;
>  
> -   _eglLockMutex(&_eglNextScreenHandleMutex);
> +   mtx_lock(&_eglNextScreenHandleMutex);
>     s = _eglNextScreenHandle;
>     _eglNextScreenHandle += _EGL_SCREEN_MAX_MODES;
> -   _eglUnlockMutex(&_eglNextScreenHandleMutex);
> +   mtx_unlock(&_eglNextScreenHandleMutex);
>  
>     return s;
>  }
> 



More information about the mesa-dev mailing list