From 2c44452b6180bffd694575f9fc1c01e671e498b5 Mon Sep 17 00:00:00 2001 From: Adhemerval Zanella Date: Mon, 24 May 2021 13:47:10 -0300 Subject: 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. --- nptl/Makefile | 1 + nptl/tst-pthread-attr-affinity-fail.c | 59 +++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 nptl/tst-pthread-attr-affinity-fail.c diff --git a/nptl/Makefile b/nptl/Makefile index 16eaf58..9a5628b 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 0000000..8334a11 --- /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 + . */ + +#include +#include +#include +#include +#include + +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 -- cgit v1.1