From: Niklas Haas Date: Mon, 8 Nov 2021 13:47:32 +0000 (+0100) Subject: Initialize global mutex in a thread-safe manner X-Git-Tag: upstream/1.3.239~158^2~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3971424207e27a662d4416eedfb68e18ff287350;p=platform%2Fupstream%2Fglslang.git Initialize global mutex in a thread-safe manner Currently, ShInitialize() and friends call glslang::InitGlobalLock() which *overwrites* the global mutex. As such, even though it ostensibly takes a mutex, this function is actually completely thread-unsafe. Fix it by using pthread_once to ensure the mutex is only initialized once, and then never again. --- diff --git a/glslang/OSDependent/Unix/ossource.cpp b/glslang/OSDependent/Unix/ossource.cpp index 3f029f0..81da99c 100644 --- a/glslang/OSDependent/Unix/ossource.cpp +++ b/glslang/OSDependent/Unix/ossource.cpp @@ -172,7 +172,7 @@ namespace { pthread_mutex_t gMutex; } -void InitGlobalLock() +static void InitMutex(void) { pthread_mutexattr_t mutexattr; pthread_mutexattr_init(&mutexattr); @@ -180,6 +180,12 @@ void InitGlobalLock() pthread_mutex_init(&gMutex, &mutexattr); } +void InitGlobalLock() +{ + static pthread_once_t once = PTHREAD_ONCE_INIT; + pthread_once(&once, InitMutex); +} + void GetGlobalLock() { pthread_mutex_lock(&gMutex);