From 5219aa99441506a18b309fc997247134e6059071 Mon Sep 17 00:00:00 2001 From: bkoz Date: Thu, 1 Jul 2004 14:49:29 +0000 Subject: [PATCH] 2004-07-01 Benjamin Kosnik Per Bothner Mohan Embar PR libstdc++/16248 * include/bits/concurrence.h (__glibcxx_mutex_type): New. (__glibcxx_mutex): Encapsulate mutex init function into type for threaded configurations without __GTHREAD_MUTEX_INIT. (lock::lock): Make device member a reference. (lock::~lock): Same. * include/ext/pool_allocator.h (__pool_base::_M_get_mutex): Change to mutex_type. * src/allocator.cc: Same. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@83985 138bc75d-0d04-0410-961f-82ee72b054a4 --- libstdc++-v3/ChangeLog | 14 ++++++++++++++ libstdc++-v3/include/bits/concurrence.h | 23 +++++++++++++++-------- libstdc++-v3/include/ext/pool_allocator.h | 2 +- libstdc++-v3/src/allocator.cc | 2 +- 4 files changed, 31 insertions(+), 10 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 4f19d105255..b645080172b 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,17 @@ +2004-07-01 Benjamin Kosnik + Per Bothner + Mohan Embar + + PR libstdc++/16248 + * include/bits/concurrence.h (__glibcxx_mutex_type): New. + (__glibcxx_mutex): Encapsulate mutex init function into type for + threaded configurations without __GTHREAD_MUTEX_INIT. + (lock::lock): Make device member a reference. + (lock::~lock): Same. + * include/ext/pool_allocator.h (__pool_base::_M_get_mutex): Change + to mutex_type. + * src/allocator.cc: Same. + 2004-06-30 Brad Spencer * include/ext/mt_allocator.h: Handle allocations at static diff --git a/libstdc++-v3/include/bits/concurrence.h b/libstdc++-v3/include/bits/concurrence.h index 03cd6ebabec..7b2fae951c6 100644 --- a/libstdc++-v3/include/bits/concurrence.h +++ b/libstdc++-v3/include/bits/concurrence.h @@ -37,18 +37,22 @@ #if __GTHREADS # ifdef __GTHREAD_MUTEX_INIT +# define __glibcxx_mutex_type __gthread_mutex_t # define __glibcxx_mutex_define_initialized(NAME) \ __gthread_mutex_t NAME = __GTHREAD_MUTEX_INIT # define __glibcxx_mutex_lock(NAME) \ __gthread_mutex_lock(&NAME) # else // Implies __GTHREAD_MUTEX_INIT_FUNCTION +struct __glibcxx_mutex : public __gthread_mutex_t +{ + __glibcxx_mutex() { __GTHREAD_MUTEX_INIT_FUNCTION(this); } +}; + +# define __glibcxx_mutex_type __glibcxx_mutex # define __glibcxx_mutex_define_initialized(NAME) \ -__gthread_mutex_t NAME; \ -__gthread_once_t NAME ## _once = __GTHREAD_ONCE_INIT; \ -void NAME ## _init() { __GTHREAD_MUTEX_INIT_FUNCTION(&NAME); } +__glibcxx_mutex NAME # define __glibcxx_mutex_lock(NAME) \ -__gthread_once(&NAME ## _once, NAME ## _init); \ __gthread_mutex_lock(&NAME) # endif @@ -56,6 +60,7 @@ __gthread_mutex_lock(&NAME) #else +# define __glibcxx_mutex_type __gthread_mutex_t # define __glibcxx_mutex_define_initialized(NAME) __gthread_mutex_t NAME # define __glibcxx_mutex_lock(NAME) # define __glibcxx_mutex_unlock(NAME) @@ -64,19 +69,21 @@ __gthread_mutex_lock(&NAME) namespace __gnu_cxx { + typedef __glibcxx_mutex_type mutex_type; + class lock { // Externally defined and initialized. - __gthread_mutex_t* device; + mutex_type& device; public: // Acquire the mutex here with a constructor call. This ensures // that it is released in exit or during stack unwinding. - explicit lock(__gthread_mutex_t& name) : device(&name) - { __glibcxx_mutex_lock(*device); } + explicit lock(mutex_type& name) : device(name) + { __glibcxx_mutex_lock(device); } ~lock() throw() - { __glibcxx_mutex_unlock(*device); } + { __glibcxx_mutex_unlock(device); } private: lock(const lock&); diff --git a/libstdc++-v3/include/ext/pool_allocator.h b/libstdc++-v3/include/ext/pool_allocator.h index de6299be8cf..eec79e7070a 100644 --- a/libstdc++-v3/include/ext/pool_allocator.h +++ b/libstdc++-v3/include/ext/pool_allocator.h @@ -100,7 +100,7 @@ namespace __gnu_cxx _Obj* volatile* _M_get_free_list(size_t __bytes); - __gthread_mutex_t& + mutex_type& _M_get_mutex(); // Returns an object of size __n, and optionally adds to size __n diff --git a/libstdc++-v3/src/allocator.cc b/libstdc++-v3/src/allocator.cc index af5de4d2cb9..e35aa3eef16 100644 --- a/libstdc++-v3/src/allocator.cc +++ b/libstdc++-v3/src/allocator.cc @@ -51,7 +51,7 @@ namespace __gnu_cxx return _S_free_list + __i; } - __gthread_mutex_t& + mutex_type& __pool_base::_M_get_mutex() { return __gnu_internal::palloc_init_mutex; } -- 2.11.0