re PR libstdc++/17780 (std::allocator vs. static init)
authorBenjamin Kosnik <bkoz@redhat.com>
Wed, 6 Oct 2004 16:31:19 +0000 (16:31 +0000)
committerBenjamin Kosnik <bkoz@gcc.gnu.org>
Wed, 6 Oct 2004 16:31:19 +0000 (16:31 +0000)
2004-10-06  Benjamin Kosnik  <bkoz@redhat.com>
    Paolo Carlini  <pcarlini@suse.de>

PR libstdc++/17780
* src/mt_allocator.cc (__pool<true>::_M_reserve_block): Revert
to old locking order.

Co-Authored-By: Paolo Carlini <pcarlini@suse.de>
From-SVN: r88611

libstdc++-v3/ChangeLog
libstdc++-v3/src/mt_allocator.cc

index 9509eba9237a8a43aff1d13ef19df9d061b22d00..c87cda9c385241bad0d7cbd78994cea0946c5d1d 100644 (file)
@@ -1,3 +1,10 @@
+2004-10-06  Benjamin Kosnik  <bkoz@redhat.com>
+           Paolo Carlini  <pcarlini@suse.de>
+
+       PR libstdc++/17780
+       * src/mt_allocator.cc (__pool<true>::_M_reserve_block): Revert
+       to old locking order.
+
 2004-10-06  Paolo Carlini  <pcarlini@suse.de>
 
        * include/std/std_sstream.h (_M_sync): When the caller is
index 066726b03679780ad34e4a159ccb669d529aa7c3..1e45f4cfb1b7d5237dc47b10248935ba36fd87a1 100644 (file)
@@ -298,10 +298,13 @@ namespace __gnu_cxx
     _Block_record* __block = NULL;
     if (__gthread_active_p())
       {
+       __gthread_mutex_lock(__bin._M_mutex);
        if (__bin._M_first[0] == NULL)
          {
            // No need to hold the lock when we are adding a whole
            // chunk to our own list.
+           __gthread_mutex_unlock(__bin._M_mutex);
+
            void* __v = ::operator new(__options._M_chunk_size);
            __bin._M_first[__thread_id] = static_cast<_Block_record*>(__v);
            __bin._M_free[__thread_id] = __block_count;
@@ -327,7 +330,6 @@ namespace __gnu_cxx
            // Is the number of required blocks greater than or equal
            // to the number that can be provided by the global free
            // list?
-           __gthread_mutex_lock(__bin._M_mutex);
            __bin._M_first[__thread_id] = __bin._M_first[0];
            if (__block_count >= __bin._M_free[0])
              {