public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug other/53889] New: Gthreads doesn't support destroying recursive mutexes
@ 2012-07-07 18:49 redi at gcc dot gnu.org
  2012-07-07 18:50 ` [Bug other/53889] " redi at gcc dot gnu.org
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: redi at gcc dot gnu.org @ 2012-07-07 18:49 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53889

             Bug #: 53889
           Summary: Gthreads doesn't support destroying recursive mutexes
    Classification: Unclassified
           Product: gcc
           Version: 4.8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: other
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: redi@gcc.gnu.org


There is no __gthread_recursive_mutex_destroy function in the gthreads API.

Using __gthread_mutex_destroy fails to compile on platforms where the mutex
types are different. This means to avoid resource leaks libstdc++ needs to hack
around it with:

    // 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); }


Gthreads should define __gthread_recursive_mutex_destroy


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug other/53889] Gthreads doesn't support destroying recursive mutexes
  2012-07-07 18:49 [Bug other/53889] New: Gthreads doesn't support destroying recursive mutexes redi at gcc dot gnu.org
@ 2012-07-07 18:50 ` redi at gcc dot gnu.org
  2012-10-02 20:22 ` redi at gcc dot gnu.org
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: redi at gcc dot gnu.org @ 2012-07-07 18:50 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53889

--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> 2012-07-07 18:50:29 UTC ---
Created attachment 27760
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=27760
Add __gthread_recursive_mutex_destroy.

Untested.


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug other/53889] Gthreads doesn't support destroying recursive mutexes
  2012-07-07 18:49 [Bug other/53889] New: Gthreads doesn't support destroying recursive mutexes redi at gcc dot gnu.org
  2012-07-07 18:50 ` [Bug other/53889] " redi at gcc dot gnu.org
@ 2012-10-02 20:22 ` redi at gcc dot gnu.org
  2012-10-02 20:25 ` redi at gcc dot gnu.org
  2012-10-05  7:35 ` redi at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: redi at gcc dot gnu.org @ 2012-10-02 20:22 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53889

--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> 2012-10-02 20:22:40 UTC ---
Author: redi
Date: Tue Oct  2 20:22:32 2012
New Revision: 192002

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=192002
Log:
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.

Modified:
    trunk/libgcc/ChangeLog
    trunk/libgcc/config/gthr-rtems.h
    trunk/libgcc/config/gthr-vxworks.h
    trunk/libgcc/config/i386/gthr-win32.c
    trunk/libgcc/config/i386/gthr-win32.h
    trunk/libgcc/config/mips/gthr-mipssde.h
    trunk/libgcc/config/pa/gthr-dce.h
    trunk/libgcc/config/s390/gthr-tpf.h
    trunk/libgcc/gthr-posix.h
    trunk/libgcc/gthr-single.h
    trunk/libgcc/gthr.h
    trunk/libstdc++-v3/ChangeLog
    trunk/libstdc++-v3/include/ext/concurrence.h
    trunk/libstdc++-v3/include/std/mutex


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug other/53889] Gthreads doesn't support destroying recursive mutexes
  2012-07-07 18:49 [Bug other/53889] New: Gthreads doesn't support destroying recursive mutexes redi at gcc dot gnu.org
  2012-07-07 18:50 ` [Bug other/53889] " redi at gcc dot gnu.org
  2012-10-02 20:22 ` redi at gcc dot gnu.org
@ 2012-10-02 20:25 ` redi at gcc dot gnu.org
  2012-10-05  7:35 ` redi at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: redi at gcc dot gnu.org @ 2012-10-02 20:25 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53889

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|                            |FIXED
   Target Milestone|---                         |4.8.0

--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> 2012-10-02 20:24:41 UTC ---
libgcc changes approved by Ian:
http://gcc.gnu.org/ml/gcc-patches/2012-10/msg00123.html

This is fixed for 4.8


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug other/53889] Gthreads doesn't support destroying recursive mutexes
  2012-07-07 18:49 [Bug other/53889] New: Gthreads doesn't support destroying recursive mutexes redi at gcc dot gnu.org
                   ` (2 preceding siblings ...)
  2012-10-02 20:25 ` redi at gcc dot gnu.org
@ 2012-10-05  7:35 ` redi at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: redi at gcc dot gnu.org @ 2012-10-05  7:35 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53889

--- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> 2012-10-05 07:35:17 UTC ---
Author: redi
Date: Fri Oct  5 07:35:12 2012
New Revision: 192114

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=192114
Log:
    PR other/53889
    * config/i386/gthr-win32.h (__gthread_recursive_mutex_destroy):
    Fix parameter names.

Modified:
    trunk/libgcc/ChangeLog
    trunk/libgcc/config/i386/gthr-win32.h


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2012-10-05  7:35 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-07-07 18:49 [Bug other/53889] New: Gthreads doesn't support destroying recursive mutexes redi at gcc dot gnu.org
2012-07-07 18:50 ` [Bug other/53889] " redi at gcc dot gnu.org
2012-10-02 20:22 ` redi at gcc dot gnu.org
2012-10-02 20:25 ` redi at gcc dot gnu.org
2012-10-05  7:35 ` redi at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).