re PR libstdc++/51296 (Several 30_threads tests FAIL on Tru64 UNIX)
libgcc/ PR libstdc++/51296 PR libstdc++/51906 * gthr-posix.h: Allow static initializer macros to be disabled. (__gthrw_pthread_cond_init): Define weak reference unconditionally. libstdc++-v3/ PR libstdc++/51296 * include/std/mutex (__mutex_base::~__mutex_base): Declare noexcept. * src/c++11/condition_variable.cc (condition_variable): Use macro for initializer function. PR libstdc++/51906 * config/os/bsd/darwin/os_defines.h: Disable static initializer for recursive mutexes. From-SVN: r183955
This commit is contained in:
parent
38cbc63a76
commit
b59cbd5034
@ -1,3 +1,10 @@
|
||||
2012-02-07 Jonathan Wakely <jwakely.gcc@gmail.com>
|
||||
|
||||
PR libstdc++/51296
|
||||
PR libstdc++/51906
|
||||
* gthr-posix.h: Allow static initializer macros to be disabled.
|
||||
(__gthrw_pthread_cond_init): Define weak reference unconditionally.
|
||||
|
||||
2012-02-05 Chung-Lin Tang <cltang@codesourcery.com>
|
||||
|
||||
* config.host (mips64*-*-linux*, mipsisa64*-*-linux*, mips*-*-linux*):
|
||||
|
@ -74,6 +74,20 @@ typedef struct timespec __gthread_time_t;
|
||||
#define __GTHREAD_COND_INIT PTHREAD_COND_INITIALIZER
|
||||
#define __GTHREAD_TIME_INIT {0,0}
|
||||
|
||||
#ifdef _GTHREAD_USE_MUTEX_INIT_FUNC
|
||||
# undef __GTHREAD_MUTEX_INIT
|
||||
# define __GTHREAD_MUTEX_INIT_FUNCTION __gthread_mutex_init_function
|
||||
#endif
|
||||
#ifdef _GTHREAD_USE_RECURSIVE_MUTEX_INIT_FUNC
|
||||
# undef __GTHREAD_RECURSIVE_MUTEX_INIT
|
||||
# undef __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION
|
||||
# define __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION __gthread_recursive_mutex_init_function
|
||||
#endif
|
||||
#ifdef _GTHREAD_USE_COND_INIT_FUNC
|
||||
# undef __GTHREAD_COND_INIT
|
||||
# define __GTHREAD_COND_INIT_FUNCTION __gthread_cond_init_function
|
||||
#endif
|
||||
|
||||
#if SUPPORTS_WEAK && GTHREAD_USE_WEAK
|
||||
# ifndef __gthrw_pragma
|
||||
# define __gthrw_pragma(pragma)
|
||||
@ -116,6 +130,7 @@ __gthrw3(pthread_mutex_unlock)
|
||||
__gthrw3(pthread_mutex_init)
|
||||
__gthrw3(pthread_mutex_destroy)
|
||||
|
||||
__gthrw3(pthread_cond_init)
|
||||
__gthrw3(pthread_cond_broadcast)
|
||||
__gthrw3(pthread_cond_signal)
|
||||
__gthrw3(pthread_cond_wait)
|
||||
@ -145,6 +160,7 @@ __gthrw(pthread_mutex_unlock)
|
||||
__gthrw(pthread_mutex_init)
|
||||
__gthrw(pthread_mutex_destroy)
|
||||
|
||||
__gthrw(pthread_cond_init)
|
||||
__gthrw(pthread_cond_broadcast)
|
||||
__gthrw(pthread_cond_signal)
|
||||
__gthrw(pthread_cond_wait)
|
||||
@ -162,10 +178,8 @@ __gthrw(pthread_mutexattr_destroy)
|
||||
#if defined(_LIBOBJC) || defined(_LIBOBJC_WEAK)
|
||||
/* Objective-C. */
|
||||
#if defined(__osf__) && defined(_PTHREAD_USE_MANGLED_NAMES_)
|
||||
__gthrw3(pthread_cond_init)
|
||||
__gthrw3(pthread_exit)
|
||||
#else
|
||||
__gthrw(pthread_cond_init)
|
||||
__gthrw(pthread_exit)
|
||||
#endif /* __osf__ && _PTHREAD_USE_MANGLED_NAMES_ */
|
||||
#ifdef _POSIX_PRIORITY_SCHEDULING
|
||||
@ -730,6 +744,15 @@ __gthread_setspecific (__gthread_key_t __key, const void *__ptr)
|
||||
return __gthrw_(pthread_setspecific) (__key, __ptr);
|
||||
}
|
||||
|
||||
#ifdef _GTHREAD_USE_MUTEX_INIT_FUNC
|
||||
static inline void
|
||||
__gthread_mutex_init_function (__gthread_mutex_t *__mutex)
|
||||
{
|
||||
if (__gthread_active_p ())
|
||||
__gthrw_(pthread_mutex_init) (__mutex, NULL);
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline int
|
||||
__gthread_mutex_destroy (__gthread_mutex_t *__mutex)
|
||||
{
|
||||
@ -778,7 +801,8 @@ __gthread_mutex_unlock (__gthread_mutex_t *__mutex)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifndef PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
|
||||
#if !defined( PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP) \
|
||||
|| defined(_GTHREAD_USE_RECURSIVE_MUTEX_INIT_FUNC)
|
||||
static inline int
|
||||
__gthread_recursive_mutex_init_function (__gthread_recursive_mutex_t *__mutex)
|
||||
{
|
||||
@ -828,6 +852,15 @@ __gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex)
|
||||
return __gthread_mutex_unlock (__mutex);
|
||||
}
|
||||
|
||||
#ifdef _GTHREAD_USE_COND_INIT_FUNC
|
||||
static inline void
|
||||
__gthread_cond_init_function (__gthread_cond_t *__cond)
|
||||
{
|
||||
if (__gthread_active_p ())
|
||||
__gthrw_(pthread_cond_init) (__cond, NULL);
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline int
|
||||
__gthread_cond_broadcast (__gthread_cond_t *__cond)
|
||||
{
|
||||
|
@ -1,3 +1,14 @@
|
||||
2012-02-07 Jonathan Wakely <jwakely.gcc@gmail.com>
|
||||
|
||||
PR libstdc++/51296
|
||||
* include/std/mutex (__mutex_base::~__mutex_base): Declare noexcept.
|
||||
* src/c++11/condition_variable.cc (condition_variable): Use macro for
|
||||
initializer function.
|
||||
|
||||
PR libstdc++/51906
|
||||
* config/os/bsd/darwin/os_defines.h: Disable static initializer for
|
||||
recursive mutexes.
|
||||
|
||||
2012-02-06 Jonathan Wakely <jwakely.gcc@gmail.com>
|
||||
|
||||
PR libstdc++/52128
|
||||
|
@ -39,4 +39,7 @@
|
||||
// -flat_namespace to work around the way that it doesn't.
|
||||
#define _GLIBCXX_WEAK_DEFINITION __attribute__ ((weak))
|
||||
|
||||
// Static initializer macro is buggy in darwin, see libstdc++/51906
|
||||
#define _GTHREAD_USE_RECURSIVE_MUTEX_INIT_FUNC
|
||||
|
||||
#endif
|
||||
|
@ -71,7 +71,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
__GTHREAD_MUTEX_INIT_FUNCTION(&_M_mutex);
|
||||
}
|
||||
|
||||
~__mutex_base() { __gthread_mutex_destroy(&_M_mutex); }
|
||||
~__mutex_base() noexcept { __gthread_mutex_destroy(&_M_mutex); }
|
||||
#endif
|
||||
|
||||
__mutex_base(const __mutex_base&) = delete;
|
||||
|
@ -36,10 +36,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
#else
|
||||
condition_variable::condition_variable() noexcept
|
||||
{
|
||||
int __e = __gthread_cond_init(&_M_cond, 0);
|
||||
|
||||
if (__e)
|
||||
__throw_system_error(__e);
|
||||
__GTHREAD_COND_INIT_FUNCTION(&_M_cond);
|
||||
}
|
||||
|
||||
condition_variable::~condition_variable() noexcept
|
||||
|
Loading…
Reference in New Issue
Block a user