From 3d57d7bafa6c6e503c04fe234d996103b5e3e06c Mon Sep 17 00:00:00 2001 From: "Loren J. Rittle" Date: Tue, 24 Jun 2003 06:34:34 +0000 Subject: [PATCH] * include/ext/mt_allocator.h: Portability. From-SVN: r68406 --- libstdc++-v3/ChangeLog | 2 ++ libstdc++-v3/include/ext/mt_allocator.h | 16 +++++++++------- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index e2c9ce97db5..c1acd15755e 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -7,6 +7,8 @@ * config/abi/alpha-freebsd5/baseline_symbols.txt: New file. * config/abi/sparc-freebsd5/baseline_symbols.txt: New file. + * include/ext/mt_allocator.h: Portability. + 2003-06-23 Benjamin Kosnik * docs/html/17_intro/libstdc++-assign.txt: Update address. diff --git a/libstdc++-v3/include/ext/mt_allocator.h b/libstdc++-v3/include/ext/mt_allocator.h index 1e95b55f467..cd3b273ad91 100644 --- a/libstdc++-v3/include/ext/mt_allocator.h +++ b/libstdc++-v3/include/ext/mt_allocator.h @@ -613,13 +613,15 @@ namespace __gnu_cxx if (!_S_bin[bin].mutex) __throw_bad_alloc(); - /* - * This is not only ugly - it's extremly non-portable! - * However gthr.h does not currently provide a - * __gthread_mutex_init() call. The correct solution to - * this problem needs to be discussed. - */ - pthread_mutex_init(_S_bin[bin].mutex, NULL); +#ifdef __GTHREAD_MUTEX_INIT + { + // Do not copy a POSIX/gthr mutex once in use. + __gthread_mutex_t __tmp = __GTHREAD_MUTEX_INIT; + *_S_bin[bin].mutex = __tmp; + } +#else + { __GTHREAD_MUTEX_INIT_FUNCTION (_S_bin[bin].mutex); } +#endif #endif for (size_t thread = 0; thread <= _S_max_threads; thread++)