diff options
author | Florian Weimer <fweimer@redhat.com> | 2020-05-15 17:38:57 +0200 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2020-06-02 10:32:30 +0200 |
commit | 86ed0774cf0de1d281ca3c773758c9fe6f2784b4 (patch) | |
tree | b37b003b9161df6ad5197dd0bebbb1af96e0fcd8 /nptl/pthread_getattr_np.c | |
parent | 8111c457b8c4f1c113a8475e3da38bd88270ab37 (diff) | |
download | glibc-86ed0774cf0de1d281ca3c773758c9fe6f2784b4.zip glibc-86ed0774cf0de1d281ca3c773758c9fe6f2784b4.tar.gz glibc-86ed0774cf0de1d281ca3c773758c9fe6f2784b4.tar.bz2 |
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 <carlos@redhat.com>
Diffstat (limited to 'nptl/pthread_getattr_np.c')
-rw-r--r-- | nptl/pthread_getattr_np.c | 30 |
1 files changed, 14 insertions, 16 deletions
diff --git a/nptl/pthread_getattr_np.c b/nptl/pthread_getattr_np.c index 0e89113..ce43720 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); |