From: Benjamin Kosnik Date: Thu, 1 Jul 2004 14:49:29 +0000 (+0000) Subject: Per Bothner Mohan Embar X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f65d32011500ab08d981d3927ca7d151b855861e;p=gcc.git Per Bothner Mohan Embar 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. Co-Authored-By: Mohan Embar Co-Authored-By: Per Bothner From-SVN: r83985 --- 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; }