nptl: Destroy the default thread attribute as part of freeres

This avoids a spurious memory leak report by valgrind.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
This commit is contained in:
Florian Weimer 2020-05-19 11:03:11 +02:00
parent c2322a561f
commit 6993670b52
3 changed files with 13 additions and 0 deletions

View file

@ -25,6 +25,7 @@
void
__libpthread_freeres (void)
{
call_function_static_weak (__default_pthread_attr_freeres);
call_function_static_weak (__nptl_stacks_freeres);
call_function_static_weak (__shm_directory_freeres);
call_function_static_weak (__nptl_unwind_freeres);

View file

@ -201,6 +201,8 @@ enum
/* Default pthread attributes. */
extern union pthread_attr_transparent __default_pthread_attr attribute_hidden;
extern int __default_pthread_attr_lock attribute_hidden;
/* Called from __libpthread_freeres to deallocate the default attribute. */
extern void __default_pthread_attr_freeres (void) attribute_hidden;
/* Size and alignment of static TLS block. */
extern size_t __static_tls_size attribute_hidden;

View file

@ -81,3 +81,13 @@ pthread_setattr_default_np (const pthread_attr_t *in)
lll_unlock (__default_pthread_attr_lock, LLL_PRIVATE);
return ret;
}
/* This is placed in the same file as pthread_setattr_default_np
because only this function can trigger allocation of attribute
data. This way, the function is automatically defined for all the
cases when it is needed in static builds. */
void
__default_pthread_attr_freeres (void)
{
__pthread_attr_destroy (&__default_pthread_attr.external);
}