From c0bec71b82aa6503c7478ff4ac409c197c26e9c6 Mon Sep 17 00:00:00 2001 From: Benjamin Kosnik Date: Sun, 7 Mar 2004 02:17:19 +0000 Subject: [PATCH] mt_allocator.h (_S_initialize): If !__GTHREAD_MUTEX_INIT, then initialize _S_thread_freelist_mutex. 2004-03-06 Benjamin Kosnik * include/ext/mt_allocator.h (_S_initialize): If !__GTHREAD_MUTEX_INIT, then initialize _S_thread_freelist_mutex. From-SVN: r79044 --- libstdc++-v3/ChangeLog | 5 +++++ libstdc++-v3/include/ext/mt_allocator.h | 8 ++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 2f36a46b461..36decc1b2a8 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,8 @@ +2004-03-06 Benjamin Kosnik + + * include/ext/mt_allocator.h (_S_initialize): If + !__GTHREAD_MUTEX_INIT, then initialize _S_thread_freelist_mutex. + 2004-03-06 Benjamin Kosnik PR libstdc++/12658 diff --git a/libstdc++-v3/include/ext/mt_allocator.h b/libstdc++-v3/include/ext/mt_allocator.h index 1bcff03356d..7b42300ba46 100644 --- a/libstdc++-v3/include/ext/mt_allocator.h +++ b/libstdc++-v3/include/ext/mt_allocator.h @@ -548,7 +548,7 @@ namespace __gnu_cxx { if (_S_options._M_force_new) return; - + // Calculate the number of bins required based on _M_max_bytes. // _S_bin_size is statically-initialized to one. size_t bin_size = 1; @@ -598,6 +598,11 @@ namespace __gnu_cxx _S_thread_freelist_first[i - 1].next = NULL; _S_thread_freelist_first[i - 1].id = i; + + // Make sure this is initialized. +#ifndef __GTHREAD_MUTEX_INIT + __GTHREAD_MUTEX_INIT_FUNCTION(&_S_thread_freelist_mutex); +#endif // Initialize per thread key to hold pointer to // _S_thread_freelist. __gthread_key_create(&_S_thread_key, _S_destroy_thread_key); @@ -745,7 +750,6 @@ namespace __gnu_cxx #ifdef __GTHREAD_MUTEX_INIT __mt_alloc<_Tp>::_S_thread_freelist_mutex = __GTHREAD_MUTEX_INIT; #else - // XXX __mt_alloc<_Tp>::_S_thread_freelist_mutex; #endif #endif