Commit 41f24725 by Stefan Olsson Committed by Benjamin Kosnik

mt_allocator.h: Fixups.


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.

From-SVN: r75875
parent f9654065
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> 2004-01-13 Benjamin Kosnik <bkoz@redhat.com>
* testsuite/performance/ifstream_extract_float.cc: Add higher * testsuite/performance/ifstream_extract_float.cc: Add higher
......
...@@ -232,7 +232,7 @@ namespace __gnu_cxx ...@@ -232,7 +232,7 @@ namespace __gnu_cxx
* Requests larger than _S_max_bytes are handled by * Requests larger than _S_max_bytes are handled by
* new/delete directly * new/delete directly
*/ */
if (__n > _S_max_bytes) if (__n * sizeof(_Tp) > _S_max_bytes)
{ {
void* __ret = malloc(__n * sizeof(_Tp)); void* __ret = malloc(__n * sizeof(_Tp));
if (!__ret) if (!__ret)
...@@ -263,7 +263,7 @@ namespace __gnu_cxx ...@@ -263,7 +263,7 @@ namespace __gnu_cxx
/* /*
* Round up to power of 2 and figure out which bin to use * 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 #ifdef __GTHREADS
size_t thread_id = _S_get_thread_id(); size_t thread_id = _S_get_thread_id();
...@@ -408,7 +408,7 @@ namespace __gnu_cxx ...@@ -408,7 +408,7 @@ namespace __gnu_cxx
* Requests larger than _S_max_bytes are handled by * Requests larger than _S_max_bytes are handled by
* malloc/free directly * malloc/free directly
*/ */
if (__n > _S_max_bytes) if (__n * sizeof(_Tp) > _S_max_bytes)
{ {
free(__p); free(__p);
return; return;
...@@ -417,7 +417,7 @@ namespace __gnu_cxx ...@@ -417,7 +417,7 @@ namespace __gnu_cxx
/* /*
* Round up to power of 2 and figure out which bin to use * 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 #ifdef __GTHREADS
size_t thread_id = _S_get_thread_id(); size_t thread_id = _S_get_thread_id();
...@@ -607,14 +607,8 @@ namespace __gnu_cxx ...@@ -607,14 +607,8 @@ namespace __gnu_cxx
/* /*
* Initialize per thread key to hold pointer to * Initialize per thread key to hold pointer to
* _S_thread_freelist NOTE! Here's an ugly workaround - if * _S_thread_freelist
* _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_key_destr(NULL);
__gthread_key_create(&_S_thread_key, _S_thread_key_destr); __gthread_key_create(&_S_thread_key, _S_thread_key_destr);
} }
#endif #endif
...@@ -647,7 +641,6 @@ namespace __gnu_cxx ...@@ -647,7 +641,6 @@ namespace __gnu_cxx
if (!_S_bin[bin].free) if (!_S_bin[bin].free)
__throw_bad_alloc(); __throw_bad_alloc();
_S_bin[bin].used = (size_t*) malloc(sizeof(size_t) * __n); _S_bin[bin].used = (size_t*) malloc(sizeof(size_t) * __n);
if (!_S_bin[bin].used) if (!_S_bin[bin].used)
......
...@@ -133,12 +133,12 @@ int main(void) ...@@ -133,12 +133,12 @@ int main(void)
calibrate_iterations<vector<test_type> >(); calibrate_iterations<vector<test_type> >();
test_container(vector<test_type>()); test_container(vector<test_type>());
test_container(vector<test_type, malloc_allocator<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> >(); calibrate_iterations<list<test_type> >();
test_container(list<test_type>()); test_container(list<test_type>());
test_container(list<test_type, malloc_allocator<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; return 0;
} }
...@@ -147,12 +147,12 @@ int main(void) ...@@ -147,12 +147,12 @@ int main(void)
calibrate_iterations<vector<test_type> >(); calibrate_iterations<vector<test_type> >();
test_container(vector<test_type>()); test_container(vector<test_type>());
test_container(vector<test_type, malloc_allocator<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> >(); calibrate_iterations<list<test_type> >();
test_container(list<test_type>()); test_container(list<test_type>());
test_container(list<test_type, malloc_allocator<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; return 0;
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment