Per Bothner <per@bothner.com > Mohan Embar <gnustuff@thisiscool.com>
2004-07-01 Benjamin Kosnik <bkoz@redhat.com> Per Bothner <per@bothner.com > Mohan Embar <gnustuff@thisiscool.com> 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 <gnustuff@thisiscool.com> Co-Authored-By: Per Bothner <per@bothner.com> From-SVN: r83985
This commit is contained in:
parent
60ba25bfc1
commit
f65d320115
|
@ -1,3 +1,17 @@
|
||||||
|
2004-07-01 Benjamin Kosnik <bkoz@redhat.com>
|
||||||
|
Per Bothner <per@bothner.com >
|
||||||
|
Mohan Embar <gnustuff@thisiscool.com>
|
||||||
|
|
||||||
|
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 <spencer@infointeractive.com>
|
2004-06-30 Brad Spencer <spencer@infointeractive.com>
|
||||||
|
|
||||||
* include/ext/mt_allocator.h: Handle allocations at static
|
* include/ext/mt_allocator.h: Handle allocations at static
|
||||||
|
|
|
@ -37,18 +37,22 @@
|
||||||
#if __GTHREADS
|
#if __GTHREADS
|
||||||
|
|
||||||
# ifdef __GTHREAD_MUTEX_INIT
|
# ifdef __GTHREAD_MUTEX_INIT
|
||||||
|
# define __glibcxx_mutex_type __gthread_mutex_t
|
||||||
# define __glibcxx_mutex_define_initialized(NAME) \
|
# define __glibcxx_mutex_define_initialized(NAME) \
|
||||||
__gthread_mutex_t NAME = __GTHREAD_MUTEX_INIT
|
__gthread_mutex_t NAME = __GTHREAD_MUTEX_INIT
|
||||||
# define __glibcxx_mutex_lock(NAME) \
|
# define __glibcxx_mutex_lock(NAME) \
|
||||||
__gthread_mutex_lock(&NAME)
|
__gthread_mutex_lock(&NAME)
|
||||||
# else
|
# else
|
||||||
// Implies __GTHREAD_MUTEX_INIT_FUNCTION
|
// 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) \
|
# define __glibcxx_mutex_define_initialized(NAME) \
|
||||||
__gthread_mutex_t NAME; \
|
__glibcxx_mutex NAME
|
||||||
__gthread_once_t NAME ## _once = __GTHREAD_ONCE_INIT; \
|
|
||||||
void NAME ## _init() { __GTHREAD_MUTEX_INIT_FUNCTION(&NAME); }
|
|
||||||
# define __glibcxx_mutex_lock(NAME) \
|
# define __glibcxx_mutex_lock(NAME) \
|
||||||
__gthread_once(&NAME ## _once, NAME ## _init); \
|
|
||||||
__gthread_mutex_lock(&NAME)
|
__gthread_mutex_lock(&NAME)
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
@ -56,6 +60,7 @@ __gthread_mutex_lock(&NAME)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
# define __glibcxx_mutex_type __gthread_mutex_t
|
||||||
# define __glibcxx_mutex_define_initialized(NAME) __gthread_mutex_t NAME
|
# define __glibcxx_mutex_define_initialized(NAME) __gthread_mutex_t NAME
|
||||||
# define __glibcxx_mutex_lock(NAME)
|
# define __glibcxx_mutex_lock(NAME)
|
||||||
# define __glibcxx_mutex_unlock(NAME)
|
# define __glibcxx_mutex_unlock(NAME)
|
||||||
|
@ -64,19 +69,21 @@ __gthread_mutex_lock(&NAME)
|
||||||
|
|
||||||
namespace __gnu_cxx
|
namespace __gnu_cxx
|
||||||
{
|
{
|
||||||
|
typedef __glibcxx_mutex_type mutex_type;
|
||||||
|
|
||||||
class lock
|
class lock
|
||||||
{
|
{
|
||||||
// Externally defined and initialized.
|
// Externally defined and initialized.
|
||||||
__gthread_mutex_t* device;
|
mutex_type& device;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// Acquire the mutex here with a constructor call. This ensures
|
// Acquire the mutex here with a constructor call. This ensures
|
||||||
// that it is released in exit or during stack unwinding.
|
// that it is released in exit or during stack unwinding.
|
||||||
explicit lock(__gthread_mutex_t& name) : device(&name)
|
explicit lock(mutex_type& name) : device(name)
|
||||||
{ __glibcxx_mutex_lock(*device); }
|
{ __glibcxx_mutex_lock(device); }
|
||||||
|
|
||||||
~lock() throw()
|
~lock() throw()
|
||||||
{ __glibcxx_mutex_unlock(*device); }
|
{ __glibcxx_mutex_unlock(device); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
lock(const lock&);
|
lock(const lock&);
|
||||||
|
|
|
@ -100,7 +100,7 @@ namespace __gnu_cxx
|
||||||
_Obj* volatile*
|
_Obj* volatile*
|
||||||
_M_get_free_list(size_t __bytes);
|
_M_get_free_list(size_t __bytes);
|
||||||
|
|
||||||
__gthread_mutex_t&
|
mutex_type&
|
||||||
_M_get_mutex();
|
_M_get_mutex();
|
||||||
|
|
||||||
// Returns an object of size __n, and optionally adds to size __n
|
// Returns an object of size __n, and optionally adds to size __n
|
||||||
|
|
|
@ -51,7 +51,7 @@ namespace __gnu_cxx
|
||||||
return _S_free_list + __i;
|
return _S_free_list + __i;
|
||||||
}
|
}
|
||||||
|
|
||||||
__gthread_mutex_t&
|
mutex_type&
|
||||||
__pool_base::_M_get_mutex()
|
__pool_base::_M_get_mutex()
|
||||||
{ return __gnu_internal::palloc_init_mutex; }
|
{ return __gnu_internal::palloc_init_mutex; }
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue