mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-28 16:01:00 +08:00
re PR other/53889 (Gthreads doesn't support destroying recursive mutexes)
libgcc: PR other/53889 * gthr.h (__gthread_recursive_mutex_destroy): Document new required function. * gthr-posix.h (__gthread_recursive_mutex_destroy): Define. * gthr-single.h (__gthread_recursive_mutex_destroy): Likewise. * config/gthr-rtems.h (__gthread_recursive_mutex_destroy): Likewise. * config/gthr-vxworks.h (__gthread_recursive_mutex_destroy): Likewise. * config/i386/gthr-win32.h (__gthread_recursive_mutex_destroy): Likewise. * config/mips/gthr-mipssde.h (__gthread_recursive_mutex_destroy): Likewise. * config/pa/gthr-dce.h (__gthread_recursive_mutex_destroy): Likewise. * config/s390/gthr-tpf.h (__gthread_recursive_mutex_destroy): Likewise. libstdc++-v3: PR other/53889 * include/std/mutex (__recursive_mutex_base::~__recursive_mutex_base): Use __gthread_recursive_mutex_destroy. (__recursive_mutex_base::_S_destroy): Remove. (__recursive_mutex_base::_S_destroy_win32): Likewise. * include/ext/concurrence.h (__recursive_mutex::~__recursive_mutex): Use __gthread_recursive_mutex_destroy. (__recursive_mutex::_S_destroy): Remove. (__recursive_mutex::_S_destroy_win32): Likewise. From-SVN: r192002
This commit is contained in:
parent
e9f950ba0d
commit
1504e3e1c4
@ -1,3 +1,19 @@
|
||||
2012-10-02 Jonathan Wakely <jwakely.gcc@gmail.com>
|
||||
|
||||
PR other/53889
|
||||
* gthr.h (__gthread_recursive_mutex_destroy): Document new required
|
||||
function.
|
||||
* gthr-posix.h (__gthread_recursive_mutex_destroy): Define.
|
||||
* gthr-single.h (__gthread_recursive_mutex_destroy): Likewise.
|
||||
* config/gthr-rtems.h (__gthread_recursive_mutex_destroy): Likewise.
|
||||
* config/gthr-vxworks.h (__gthread_recursive_mutex_destroy): Likewise.
|
||||
* config/i386/gthr-win32.h (__gthread_recursive_mutex_destroy):
|
||||
Likewise.
|
||||
* config/mips/gthr-mipssde.h (__gthread_recursive_mutex_destroy):
|
||||
Likewise.
|
||||
* config/pa/gthr-dce.h (__gthread_recursive_mutex_destroy): Likewise.
|
||||
* config/s390/gthr-tpf.h (__gthread_recursive_mutex_destroy): Likewise.
|
||||
|
||||
2012-09-19 Mark Kettenis <kettenis@openbsd.org>
|
||||
|
||||
* config.host (hppa-*-openbsd*): New target.
|
||||
|
@ -1,8 +1,7 @@
|
||||
/* RTEMS threads compatibility routines for libgcc2 and libobjc.
|
||||
by: Rosimildo da Silva( rdasilva@connecttel.com ) */
|
||||
/* Compile this one with gcc. */
|
||||
/* Copyright (C) 1997, 1999, 2000, 2002, 2003, 2005, 2008, 2009
|
||||
Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1997-2012 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
@ -150,6 +149,14 @@ __gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex)
|
||||
return rtems_gxx_recursive_mutex_unlock( __mutex );
|
||||
}
|
||||
|
||||
static inline int
|
||||
__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex)
|
||||
{
|
||||
/* This requires that recursive and non-recursive mutexes have the same
|
||||
representation. */
|
||||
return rtems_gxx_mutex_destroy (__mutex );
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@ -1,7 +1,6 @@
|
||||
/* Threads compatibility routines for libgcc2 and libobjc for VxWorks. */
|
||||
/* Compile this one with gcc. */
|
||||
/* Copyright (C) 1997, 1999, 2000, 2008, 2009, 2011
|
||||
Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1997-2012 Free Software Foundation, Inc.
|
||||
Contributed by Mike Stump <mrs@wrs.com>.
|
||||
|
||||
This file is part of GCC.
|
||||
@ -111,6 +110,12 @@ __gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *mutex)
|
||||
return __gthread_mutex_unlock (mutex);
|
||||
}
|
||||
|
||||
static inline int
|
||||
__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex)
|
||||
{
|
||||
return __gthread_mutex_destroy (__mutex);
|
||||
}
|
||||
|
||||
/* pthread_once is complicated enough that it's implemented
|
||||
out-of-line. See config/vxlib.c. */
|
||||
|
||||
|
@ -1,8 +1,7 @@
|
||||
/* Implementation of W32-specific threads compatibility routines for
|
||||
libgcc2. */
|
||||
|
||||
/* Copyright (C) 1999, 2000, 2002, 2004, 2008, 2009, 2011
|
||||
Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1999-2012 Free Software Foundation, Inc.
|
||||
Contributed by Mumit Khan <khan@xraylith.wisc.edu>.
|
||||
Modified and moved to separate file by Danny Smith
|
||||
<dannysmith@users.sourceforge.net>.
|
||||
@ -259,3 +258,10 @@ __gthr_win32_recursive_mutex_unlock (__gthread_recursive_mutex_t *mutex)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
__gthr_win32_recursive_mutex_destroy (__gthread_recursive_mutex_t *mutex)
|
||||
{
|
||||
CloseHandle ((HANDLE) mutex->sema);
|
||||
return 0;
|
||||
}
|
||||
|
@ -1,8 +1,7 @@
|
||||
/* Threads compatibility routines for libgcc2 and libobjc. */
|
||||
/* Compile this one with gcc. */
|
||||
|
||||
/* Copyright (C) 1999, 2000, 2002, 2003, 2004, 2005, 2008, 2009
|
||||
Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1999-2012 Free Software Foundation, Inc.
|
||||
Contributed by Mumit Khan <khan@xraylith.wisc.edu>.
|
||||
|
||||
This file is part of GCC.
|
||||
@ -430,6 +429,8 @@ extern int
|
||||
__gthr_win32_recursive_mutex_trylock (__gthread_recursive_mutex_t *);
|
||||
extern int __gthr_win32_recursive_mutex_unlock (__gthread_recursive_mutex_t *);
|
||||
extern void __gthr_win32_mutex_destroy (__gthread_mutex_t *);
|
||||
extern int
|
||||
__gthr_win32_recursive_mutex_destroy (__gthread_recursive_mutex_t *);
|
||||
|
||||
static inline int
|
||||
__gthread_once (__gthread_once_t *__once, void (*__func) (void))
|
||||
@ -536,6 +537,12 @@ __gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int
|
||||
__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *mutex)
|
||||
{
|
||||
return __gthr_win32_recursive_mutex_destroy (__mutex);
|
||||
}
|
||||
|
||||
#else /* ! __GTHREAD_HIDE_WIN32API */
|
||||
|
||||
#include <windows.h>
|
||||
@ -761,6 +768,13 @@ __gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int
|
||||
__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *mutex)
|
||||
{
|
||||
CloseHandle ((HANDLE) mutex->sema);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* __GTHREAD_HIDE_WIN32API */
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* MIPS SDE threads compatibility routines for libgcc2 and libobjc. */
|
||||
/* Compile this one with gcc. */
|
||||
/* Copyright (C) 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2006-2012 Free Software Foundation, Inc.
|
||||
Contributed by Nigel Stephens <nigel@mips.com>
|
||||
|
||||
This file is part of GCC.
|
||||
@ -223,6 +223,13 @@ __gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int
|
||||
__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t
|
||||
* UNUSED(__mutex))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@ -1,7 +1,6 @@
|
||||
/* Threads compatibility routines for libgcc2 and libobjc. */
|
||||
/* Compile this one with gcc. */
|
||||
/* Copyright (C) 1997, 1999, 2000, 2001, 2004, 2005, 2008, 2009
|
||||
Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1997-2012 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
@ -557,6 +556,12 @@ __gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex)
|
||||
return __gthread_mutex_unlock (__mutex);
|
||||
}
|
||||
|
||||
static inline int
|
||||
__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex)
|
||||
{
|
||||
return __gthread_mutex_destroy (__mutex);
|
||||
}
|
||||
|
||||
#endif /* _LIBOBJC */
|
||||
|
||||
#endif
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* Threads compatibility routines for libgcc2 and libobjc.
|
||||
Compile this one with gcc.
|
||||
Copyright (C) 2004, 2005, 2008, 2009 Free Software Foundation, Inc.
|
||||
Copyright (C) 2004-2012 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
@ -225,5 +225,10 @@ __gthread_recursive_mutex_init_function (__gthread_recursive_mutex_t *__mutex)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int
|
||||
__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex)
|
||||
{
|
||||
return __gthread_mutex_destroy (__mutex);
|
||||
}
|
||||
|
||||
#endif /* ! GCC_GTHR_TPF_H */
|
||||
|
@ -832,6 +832,12 @@ __gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex)
|
||||
return __gthread_mutex_unlock (__mutex);
|
||||
}
|
||||
|
||||
static inline int
|
||||
__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex)
|
||||
{
|
||||
return __gthread_mutex_destroy (__mutex);
|
||||
}
|
||||
|
||||
#ifdef _GTHREAD_USE_COND_INIT_FUNC
|
||||
static inline void
|
||||
__gthread_cond_init_function (__gthread_cond_t *__cond)
|
||||
|
@ -1,7 +1,6 @@
|
||||
/* Threads compatibility routines for libgcc2 and libobjc. */
|
||||
/* Compile this one with gcc. */
|
||||
/* Copyright (C) 1997, 1999, 2000, 2004, 2008, 2009
|
||||
Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1997-2012 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
@ -286,6 +285,12 @@ __gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex)
|
||||
return __gthread_mutex_unlock (__mutex);
|
||||
}
|
||||
|
||||
static inline int
|
||||
__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex)
|
||||
{
|
||||
return __gthread_mutex_destroy (__mutex);
|
||||
}
|
||||
|
||||
#endif /* _LIBOBJC */
|
||||
|
||||
#undef UNUSED
|
||||
|
@ -1,7 +1,6 @@
|
||||
/* Threads compatibility routines for libgcc2. */
|
||||
/* Compile this one with gcc. */
|
||||
/* Copyright (C) 1997, 1998, 2004, 2008, 2009, 2011
|
||||
Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1997-2012 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
@ -73,6 +72,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||
int __gthread_setspecific (__gthread_key_t key, const void *ptr)
|
||||
|
||||
int __gthread_mutex_destroy (__gthread_mutex_t *mutex);
|
||||
int __gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *mutex);
|
||||
|
||||
int __gthread_mutex_lock (__gthread_mutex_t *mutex);
|
||||
int __gthread_mutex_trylock (__gthread_mutex_t *mutex);
|
||||
|
@ -1,3 +1,15 @@
|
||||
2012-10-02 Jonathan Wakely <jwakely.gcc@gmail.com>
|
||||
|
||||
PR other/53889
|
||||
* include/std/mutex (__recursive_mutex_base::~__recursive_mutex_base):
|
||||
Use __gthread_recursive_mutex_destroy.
|
||||
(__recursive_mutex_base::_S_destroy): Remove.
|
||||
(__recursive_mutex_base::_S_destroy_win32): Likewise.
|
||||
* include/ext/concurrence.h (__recursive_mutex::~__recursive_mutex):
|
||||
Use __gthread_recursive_mutex_destroy.
|
||||
(__recursive_mutex::_S_destroy): Remove.
|
||||
(__recursive_mutex::_S_destroy_win32): Likewise.
|
||||
|
||||
2012-10-01 Benjamin Kosnik <bkoz@redhat.com>
|
||||
|
||||
* config/abi/pre/gnu-versioned-namespace.ver: Add more
|
||||
|
@ -219,7 +219,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
~__recursive_mutex()
|
||||
{
|
||||
if (__gthread_active_p())
|
||||
_S_destroy(&_M_mutex);
|
||||
__gthread_recursive_mutex_destroy(&_M_mutex);
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -247,43 +247,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
|
||||
__gthread_recursive_mutex_t* gthread_recursive_mutex(void)
|
||||
{ return &_M_mutex; }
|
||||
|
||||
#if __GTHREADS && ! defined __GTHREAD_RECURSIVE_MUTEX_INIT
|
||||
// FIXME: gthreads doesn't define __gthread_recursive_mutex_destroy
|
||||
// so we need to obtain a __gthread_mutex_t to destroy
|
||||
private:
|
||||
template<typename _Mx, typename _Rm>
|
||||
static void
|
||||
_S_destroy_win32(_Mx* __mx, _Rm const* __rmx)
|
||||
{
|
||||
__mx->counter = __rmx->counter;
|
||||
__mx->sema = __rmx->sema;
|
||||
__gthread_mutex_destroy(__mx);
|
||||
}
|
||||
|
||||
// matches a gthr-win32.h recursive mutex
|
||||
template<typename _Rm>
|
||||
static typename __enable_if<(bool)sizeof(&_Rm::sema), void>::__type
|
||||
_S_destroy(_Rm* __mx)
|
||||
{
|
||||
__gthread_mutex_t __tmp;
|
||||
_S_destroy_win32(&__tmp, __mx);
|
||||
}
|
||||
|
||||
// matches a recursive mutex with a member 'actual'
|
||||
template<typename _Rm>
|
||||
static typename __enable_if<(bool)sizeof(&_Rm::actual), void>::__type
|
||||
_S_destroy(_Rm* __mx)
|
||||
{ __gthread_mutex_destroy(&__mx->actual); }
|
||||
|
||||
// matches when there's only one mutex type
|
||||
template<typename _Rm>
|
||||
static typename
|
||||
__enable_if<std::__are_same<_Rm, __gthread_mutex_t>::__value,
|
||||
void>::__type
|
||||
_S_destroy(_Rm* __mx)
|
||||
{ __gthread_mutex_destroy(__mx); }
|
||||
#endif
|
||||
};
|
||||
|
||||
/// Scoped lock idiom.
|
||||
|
@ -1,7 +1,6 @@
|
||||
// <mutex> -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
|
||||
// Free Software Foundation, Inc.
|
||||
// Copyright (C) 2003-2012 Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
@ -101,42 +100,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
}
|
||||
|
||||
~__recursive_mutex_base()
|
||||
{ _S_destroy(&_M_mutex); }
|
||||
|
||||
private:
|
||||
// FIXME: gthreads doesn't define __gthread_recursive_mutex_destroy
|
||||
// so we need to obtain a __gthread_mutex_t to destroy
|
||||
|
||||
// matches when there's only one mutex type
|
||||
template<typename _Rm>
|
||||
static
|
||||
typename enable_if<is_same<_Rm, __gthread_mutex_t>::value, void>::type
|
||||
_S_destroy(_Rm* __mx)
|
||||
{ __gthread_mutex_destroy(__mx); }
|
||||
|
||||
// matches a recursive mutex with a member 'actual'
|
||||
template<typename _Rm>
|
||||
static typename enable_if<(bool)sizeof(&_Rm::actual), void>::type
|
||||
_S_destroy(_Rm* __mx)
|
||||
{ __gthread_mutex_destroy(&__mx->actual); }
|
||||
|
||||
// matches a gthr-win32.h recursive mutex
|
||||
template<typename _Rm>
|
||||
static typename enable_if<(bool)sizeof(&_Rm::sema), void>::type
|
||||
_S_destroy(_Rm* __mx)
|
||||
{
|
||||
__gthread_mutex_t __tmp;
|
||||
_S_destroy_win32(&__tmp, __mx);
|
||||
}
|
||||
|
||||
template<typename _Mx, typename _Rm>
|
||||
static void
|
||||
_S_destroy_win32(_Mx* __mx, _Rm const* __rmx)
|
||||
{
|
||||
__mx->counter = __rmx->counter;
|
||||
__mx->sema = __rmx->sema;
|
||||
__gthread_mutex_destroy(__mx);
|
||||
}
|
||||
{ __gthread_recursive_mutex_destroy(&_M_mutex); }
|
||||
#endif
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user