OSDN Git Service

2004-01-14 Stefan Olsson <stefan@snon.net>
authorbkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 14 Jan 2004 18:54:18 +0000 (18:54 +0000)
committerbkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 14 Jan 2004 18:54:18 +0000 (18:54 +0000)
* include/ext/mt_allocator.h: Fixups.
* testsuite/performance/allocator.cc: Enable __mt_alloc tests.
* testsuite/performance/allocator_thread.cc: Same.

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

libstdc++-v3/ChangeLog
libstdc++-v3/include/ext/mt_allocator.h
libstdc++-v3/testsuite/performance/allocator.cc
libstdc++-v3/testsuite/performance/allocator_thread.cc

index fab586e..2afafca 100644 (file)
@@ -1,3 +1,9 @@
+2004-01-14  Stefan Olsson  <stefan@snon.net>
+
+       * include/ext/mt_allocator.h: Fixups.
+       * testsuite/performance/allocator.cc: Enable __mt_alloc tests.
+       * testsuite/performance/allocator_thread.cc: Same.
+       
 2004-01-13  Benjamin Kosnik  <bkoz@redhat.com>
 
        * testsuite/performance/ifstream_extract_float.cc: Add higher
index ec77192..5b69e63 100644 (file)
@@ -232,7 +232,7 @@ namespace __gnu_cxx
          * Requests larger than _S_max_bytes are handled by
          * new/delete directly
          */
-        if (__n > _S_max_bytes)
+        if (__n * sizeof(_Tp) > _S_max_bytes)
           {
             void* __ret = malloc(__n * sizeof(_Tp));
             if (!__ret)
@@ -263,7 +263,7 @@ namespace __gnu_cxx
         /*
          * Round up to power of 2 and figure out which bin to use
          */
-        size_t bin = _S_binmap[__n];
+        size_t bin = _S_binmap[__n * sizeof(_Tp)];
 
 #ifdef __GTHREADS
         size_t thread_id = _S_get_thread_id();
@@ -408,7 +408,7 @@ namespace __gnu_cxx
          * Requests larger than _S_max_bytes are handled by
          * malloc/free directly
          */
-        if (__n > _S_max_bytes)
+        if (__n * sizeof(_Tp) > _S_max_bytes)
           {
             free(__p);
             return;
@@ -417,7 +417,7 @@ namespace __gnu_cxx
         /*
          * Round up to power of 2 and figure out which bin to use
          */
-        size_t bin = _S_binmap[__n];
+        size_t bin = _S_binmap[__n * sizeof(_Tp)];
 
 #ifdef __GTHREADS
         size_t thread_id = _S_get_thread_id();
@@ -607,14 +607,8 @@ namespace __gnu_cxx
 
           /*
            * Initialize per thread key to hold pointer to
-           * _S_thread_freelist NOTE! Here's an ugly workaround - if
-           * _S_thread_key_destr is not explicitly called at least
-           * once it won't be linked into the application. This is the
-           * behavior of template methods and __gthread_key_create()
-           * takes only a pointer to the function and does not cause
-           * the compiler to create an instance.
+           * _S_thread_freelist
            */
-          _S_thread_key_destr(NULL);
           __gthread_key_create(&_S_thread_key, _S_thread_key_destr);
         }
 #endif
@@ -647,7 +641,6 @@ namespace __gnu_cxx
 
           if (!_S_bin[bin].free)
             __throw_bad_alloc();
-
           _S_bin[bin].used = (size_t*) malloc(sizeof(size_t) * __n);
 
           if (!_S_bin[bin].used)
index 88314a1..c7299fc 100644 (file)
@@ -133,12 +133,12 @@ int main(void)
   calibrate_iterations<vector<test_type> >();
   test_container(vector<test_type>());
   test_container(vector<test_type, malloc_allocator<test_type> >());
-  //test_container(vector<test_type, __mt_alloc<test_type> >());
+  test_container(vector<test_type, __mt_alloc<test_type> >());
 
   calibrate_iterations<list<test_type> >();
   test_container(list<test_type>());
   test_container(list<test_type, malloc_allocator<test_type> >());
-  //test_container(list<test_type, __mt_alloc<test_type> >());
+  test_container(list<test_type, __mt_alloc<test_type> >());
 
   return 0;
 }
index 98cf2b1..68da4d7 100644 (file)
@@ -147,12 +147,12 @@ int main(void)
   calibrate_iterations<vector<test_type> >();
   test_container(vector<test_type>());
   test_container(vector<test_type, malloc_allocator<test_type> >());
-  //test_container(vector<test_type, __mt_alloc<test_type> >());
+  test_container(vector<test_type, __mt_alloc<test_type> >());
 
   calibrate_iterations<list<test_type> >();
   test_container(list<test_type>());
   test_container(list<test_type, malloc_allocator<test_type> >());
-  //test_container(list<test_type, __mt_alloc<test_type> >());
+  test_container(list<test_type, __mt_alloc<test_type> >());
 
   return 0;
 }