diff options
author | Florian Weimer <fweimer@redhat.com> | 2020-05-18 18:25:18 +0200 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2020-06-02 10:32:37 +0200 |
commit | c2322a561f74b8fa41b9d9c6b8eb57e28de46f3e (patch) | |
tree | 85673d97ee3c4a1d79d67e3e267a12c63cf7946f /nptl/pthread_create.c | |
parent | 86ed0774cf0de1d281ca3c773758c9fe6f2784b4 (diff) | |
download | glibc-c2322a561f74b8fa41b9d9c6b8eb57e28de46f3e.zip glibc-c2322a561f74b8fa41b9d9c6b8eb57e28de46f3e.tar.gz glibc-c2322a561f74b8fa41b9d9c6b8eb57e28de46f3e.tar.bz2 |
nptl: Change type of __default_pthread_attr
union pthread_attr_transparent has always the correct size, even if
pthread_attr_t has padding that is not present in struct pthread_attr.
This should not result in an observable behavioral change. The
existing code appears to have been correct, but it was brittle because
it was not clear which functions were allowed to write to an entire
pthread_attr_t argument (e.g., by copying it).
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Diffstat (limited to 'nptl/pthread_create.c')
-rw-r--r-- | nptl/pthread_create.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/nptl/pthread_create.c b/nptl/pthread_create.c index 347d510..86fbeb5 100644 --- a/nptl/pthread_create.c +++ b/nptl/pthread_create.c @@ -612,16 +612,16 @@ __pthread_create_2_1 (pthread_t *newthread, const pthread_attr_t *attr, 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; @@ -852,7 +852,7 @@ __pthread_create_2_1 (pthread_t *newthread, const pthread_attr_t *attr, out: if (destroy_default_attr) - __pthread_attr_destroy ((pthread_attr_t *) &default_attr); + __pthread_attr_destroy (&default_attr.external); return retval; } |