mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-21 01:12:26 +08:00
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>
This commit is contained in:
parent
8111c457b8
commit
86ed0774cf
@ -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)
|
||||
{
|
||||
ret = __pthread_attr_setaffinity_np (attr, size, cpuset);
|
||||
else if (ret == ENOSYS)
|
||||
/* There is no such functionality. */
|
||||
ret = 0;
|
||||
iattr->cpuset = NULL;
|
||||
iattr->cpusetsize = 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);
|
||||
|
Loading…
Reference in New Issue
Block a user