From c4e9df64c2a5a3926e3c1895c4969ef92d410561 Mon Sep 17 00:00:00 2001 From: syntheticpp Date: Wed, 27 Jul 2005 16:32:20 +0000 Subject: [PATCH] asserts to catch >static initialization order fiasco< git-svn-id: svn://svn.code.sf.net/p/loki-lib/code/trunk@180 7ec92016-0320-0410-acc4-a06ded1c099a --- include/loki/Threads.h | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/include/loki/Threads.h b/include/loki/Threads.h index 43f7f4e..962f542 100644 --- a/include/loki/Threads.h +++ b/include/loki/Threads.h @@ -140,20 +140,16 @@ namespace Loki CRITICAL_SECTION mtx_; bool init_; - Initializer() - { - init(); - } - ~Initializer() - { - assert( init_ ); - ::DeleteCriticalSection(&mtx_); - } - void init() + Initializer():init_(false) { ::InitializeCriticalSection(&mtx_); init_=true; } + ~Initializer() + { + assert(init_); + ::DeleteCriticalSection(&mtx_); + } }; static Initializer initializer_; @@ -169,18 +165,17 @@ namespace Loki public: Lock() { - assert( initializer_.init_ ); - //if(!initializer_.init_) initializer_.init(); - ::EnterCriticalSection(&initializer_.mtx_); + assert(initializer_.init_); + ::EnterCriticalSection(&initializer_.mtx_); } explicit Lock(const ClassLevelLockable&) { - assert( initializer_.init_ ); + assert(initializer_.init_); ::EnterCriticalSection(&initializer_.mtx_); } ~Lock() { - assert( initializer_.init_ ); + assert(initializer_.init_); ::LeaveCriticalSection(&initializer_.mtx_); } };