2004-07-01 Benjamin Kosnik <bkoz@redhat.com>
authorbkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 1 Jul 2004 14:49:29 +0000 (14:49 +0000)
committerbkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 1 Jul 2004 14:49:29 +0000 (14:49 +0000)
            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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@83985 138bc75d-0d04-0410-961f-82ee72b054a4

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/concurrence.h
libstdc++-v3/include/ext/pool_allocator.h
libstdc++-v3/src/allocator.cc

index 4f19d10..b645080 100644 (file)
@@ -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>
 
        * include/ext/mt_allocator.h: Handle allocations at static
index 03cd6eb..7b2fae9 100644 (file)
 #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&);
index de6299b..eec79e7 100644 (file)
@@ -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
index af5de4d..e35aa3e 100644 (file)
@@ -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; }