From: Florian Weimer Date: Fri, 15 May 2020 15:38:57 +0000 (+0200) Subject: nptl: Use __pthread_attr_setaffinity_np in pthread_getattr_np X-Git-Tag: glibc-2.32~272 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=86ed0774cf0de1d281ca3c773758c9fe6f2784b4;p=thirdparty%2Fglibc.git nptl: Use __pthread_attr_setaffinity_np in pthread_getattr_np This avoids duplicating the code for the affinity mask allocation handling. Reviewed-by: Carlos O'Donell --- diff --git a/nptl/pthread_getattr_np.c b/nptl/pthread_getattr_np.c index 0e8911346d5..ce437205e41 100644 --- a/nptl/pthread_getattr_np.c +++ b/nptl/pthread_getattr_np.c @@ -33,8 +33,13 @@ int __pthread_getattr_np (pthread_t thread_id, pthread_attr_t *attr) { struct pthread *thread = (struct pthread *) thread_id; + + /* Prepare the new thread attribute. */ + int ret = __pthread_attr_init (attr); + if (ret != 0) + return ret; + struct pthread_attr *iattr = (struct pthread_attr *) attr; - int ret = 0; lll_lock (thread->lock, LLL_PRIVATE); @@ -187,25 +192,18 @@ __pthread_getattr_np (pthread_t thread_id, pthread_attr_t *attr) while (ret == EINVAL && size < 1024 * 1024); if (ret == 0) - { - iattr->cpuset = cpuset; - iattr->cpusetsize = size; - } - else - { - free (cpuset); - if (ret == ENOSYS) - { - /* There is no such functionality. */ - ret = 0; - iattr->cpuset = NULL; - iattr->cpusetsize = 0; - } - } + ret = __pthread_attr_setaffinity_np (attr, size, cpuset); + else if (ret == ENOSYS) + /* There is no such functionality. */ + ret = 0; + free (cpuset); } lll_unlock (thread->lock, LLL_PRIVATE); + if (ret != 0) + __pthread_attr_destroy (attr); + return ret; } versioned_symbol (libc, __pthread_getattr_np, pthread_getattr_np, GLIBC_2_32);