diff options
author | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2021-05-24 13:47:10 -0300 |
---|---|---|
committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2021-05-27 13:12:16 -0300 |
commit | 2c44452b6180bffd694575f9fc1c01e671e498b5 (patch) | |
tree | e013ceea7fa84930481d73bf5fba8ff65bc23975 | |
parent | d85ad0e58a068623a09a4a3463dce3bf411c8cb4 (diff) | |
download | glibc-2c44452b6180bffd694575f9fc1c01e671e498b5.tar.gz glibc-2c44452b6180bffd694575f9fc1c01e671e498b5.tar.xz glibc-2c44452b6180bffd694575f9fc1c01e671e498b5.zip |
nptl: Add pthread_attr_setaffinity_np failure test
It checks whether an invalid affinity mask does return an error, similar to what sysdeps/pthread/tst-bad-schedattr.c does for pthread_attr_setschedparam. Checked on x86_64-linux-gnu.
-rw-r--r-- | nptl/Makefile | 1 | ||||
-rw-r--r-- | nptl/tst-pthread-attr-affinity-fail.c | 59 |
2 files changed, 60 insertions, 0 deletions
diff --git a/nptl/Makefile b/nptl/Makefile index 16eaf58948..9a5628b751 100644 --- a/nptl/Makefile +++ b/nptl/Makefile @@ -286,6 +286,7 @@ tests = tst-attr2 tst-attr3 tst-default-attr \ tst-exec4 tst-exec5 \ tst-stack2 tst-stack3 tst-stack4 \ tst-pthread-attr-affinity \ + tst-pthread-attr-affinity-fail \ tst-dlsym1 \ tst-context1 \ tst-sched1 \ diff --git a/nptl/tst-pthread-attr-affinity-fail.c b/nptl/tst-pthread-attr-affinity-fail.c new file mode 100644 index 0000000000..8334a110cd --- /dev/null +++ b/nptl/tst-pthread-attr-affinity-fail.c @@ -0,0 +1,59 @@ +/* Check if invalid pthread_attr_getaffinity_np does not run any code + in the thread function. + Copyright (C) 2021 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <errno.h> +#include <support/check.h> +#include <support/xunistd.h> +#include <support/xthread.h> +#include <stdlib.h> + +static void * +thr_func (void *arg) +{ + abort (); + return NULL; +} + +static int +do_test (void) +{ + int max_cpu = xsysconf (_SC_NPROCESSORS_CONF) + 1; + /* Set a affinity mask with an invalid CPU. */ + cpu_set_t *cpuset = CPU_ALLOC (max_cpu); + TEST_VERIFY_EXIT (cpuset != NULL); + size_t cpusetsize = CPU_ALLOC_SIZE (max_cpu); + CPU_ZERO_S (cpusetsize, cpuset); + CPU_SET_S (max_cpu, cpusetsize, cpuset); + + /* Check if the affinity mask does trigger an error. */ + TEST_COMPARE (sched_setaffinity (0, cpusetsize, cpuset), -1); + TEST_COMPARE (errno, EINVAL); + + pthread_attr_t attr; + xpthread_attr_init (&attr); + xpthread_attr_setaffinity_np (&attr, cpusetsize, cpuset); + + pthread_t thr; + TEST_COMPARE (pthread_create (&thr, &attr, thr_func, NULL), EINVAL); + xpthread_attr_destroy (&attr); + + return 0; +} + +#include <support/test-driver.c> |