On Sun, Sep 30, 2012 at 11:41 AM, Jonathan Wakely <[email protected]> wrote:
> There is no __gthread_recursive_mutex_destroy function in the gthreads API.
>
> Trying to use __gthread_mutex_destroy fails to compile on platforms
> where the mutex
> types are different. To avoid resource leaks libstdc++ needs to hack
> around the missing function with overloaded functions and SFINAE
> tricks to detect how a recursive mutex can be destroyed.
>
> This patch extends the gthreads API to include
> __gthread_recursive_mutex_destroy, defining it for each gthread model,
> and removing the hacks from libstdc++.
> + return rtems_gxx_mutex_destroy( __mutex );
Space before '(', not space after.
Doing anything else here is going to be painful, but this assumes that
RTEMS uses the same representation for non-recursive and recursive
mutexes. That is currently true, but it deserves a comment.
> --- a/libgcc/config/i386/gthr-win32.h
> +++ b/libgcc/config/i386/gthr-win32.h
> +static inline void
> +__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *mutex)
> +{
> + __gthread_mutex_t __mutex2;
> + __mutex2.sema = mutex->sema;
> + __gthr_win32_mutex_destroy (&__mutex2);
> +}
I think it would be better to put this in
libgcc/config/i386/gthr-win32.c, like the other functions. Then you
can just call CloseHandle.
> --- a/libgcc/config/mips/gthr-mipssde.h
> +++ b/libgcc/config/mips/gthr-mipssde.h
>
> +static inline int
> +__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex)
> +{
> + return __gthread_mutex_destroy(__mutex);
> +}
Will this even compile? It doesn't look like it.
Ian