else
{
lll_lock (__default_pthread_attr_lock, LLL_PRIVATE);
- size = __default_pthread_attr.stacksize;
+ size = __default_pthread_attr.internal.stacksize;
lll_unlock (__default_pthread_attr_lock, LLL_PRIVATE);
}
/* Round the resource limit up to page size. */
limit.rlim_cur = ALIGN_UP (limit.rlim_cur, pagesz);
lll_lock (__default_pthread_attr_lock, LLL_PRIVATE);
- __default_pthread_attr.stacksize = limit.rlim_cur;
- __default_pthread_attr.guardsize = GLRO (dl_pagesize);
+ __default_pthread_attr.internal.stacksize = limit.rlim_cur;
+ __default_pthread_attr.internal.guardsize = GLRO (dl_pagesize);
lll_unlock (__default_pthread_attr_lock, LLL_PRIVATE);
#ifdef SHARED
/* Default pthread attributes. */
-extern struct pthread_attr __default_pthread_attr attribute_hidden;
+extern union pthread_attr_transparent __default_pthread_attr attribute_hidden;
extern int __default_pthread_attr_lock attribute_hidden;
/* Size and alignment of static TLS block. */
if (size == 0)
{
lll_lock (__default_pthread_attr_lock, LLL_PRIVATE);
- size = __default_pthread_attr.stacksize;
+ size = __default_pthread_attr.internal.stacksize;
lll_unlock (__default_pthread_attr_lock, LLL_PRIVATE);
}
*stacksize = size;
STACK_VARIABLES;
const struct pthread_attr *iattr = (struct pthread_attr *) attr;
- struct pthread_attr default_attr;
+ union pthread_attr_transparent default_attr;
bool destroy_default_attr = false;
bool c11 = (attr == ATTR_C11_THREAD);
if (iattr == NULL || c11)
{
- int ret = __pthread_getattr_default_np ((pthread_attr_t *) &default_attr);
+ int ret = __pthread_getattr_default_np (&default_attr.external);
if (ret != 0)
return ret;
destroy_default_attr = true;
- iattr = &default_attr;
+ iattr = &default_attr.internal;
}
struct pthread *pd = NULL;
out:
if (destroy_default_attr)
- __pthread_attr_destroy ((pthread_attr_t *) &default_attr);
+ __pthread_attr_destroy (&default_attr.external);
return retval;
}
__pthread_getattr_default_np (pthread_attr_t *out)
{
lll_lock (__default_pthread_attr_lock, LLL_PRIVATE);
- int ret = __pthread_attr_copy (out,
- (pthread_attr_t *) &__default_pthread_attr);
+ int ret = __pthread_attr_copy (out, &__default_pthread_attr.external);
lll_unlock (__default_pthread_attr_lock, LLL_PRIVATE);
return ret;
}
/* Preserve the previous stack size (see above). */
if (temp.internal.stacksize == 0)
- temp.internal.stacksize = __default_pthread_attr.stacksize;
+ temp.internal.stacksize = __default_pthread_attr.internal.stacksize;
/* Destroy the old attribute structure because it will be
overwritten. */
- __pthread_attr_destroy ((pthread_attr_t *) &__default_pthread_attr);
+ __pthread_attr_destroy (&__default_pthread_attr.external);
/* __default_pthread_attr takes ownership, so do not free
attrs.internal after this point. */
- __default_pthread_attr = temp.internal;
+ __default_pthread_attr = temp;
lll_unlock (__default_pthread_attr_lock, LLL_PRIVATE);
return ret;
/* Default thread attributes for the case when the user does not
provide any. */
-struct pthread_attr __default_pthread_attr attribute_hidden;
+union pthread_attr_transparent __default_pthread_attr attribute_hidden;
/* Mutex protecting __default_pthread_attr. */
int __default_pthread_attr_lock = LLL_LOCK_INITIALIZER;