summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugene Syromyatnikov <evgsyr@gmail.com>2021-09-19 23:32:51 +0200
committerEugene Syromyatnikov <evgsyr@gmail.com>2021-10-12 00:35:30 +0200
commit1495ee586e0b6375f3d5164b1966265272224b4c (patch)
tree53b7a3ad6d45195adc596983542de22b11226867
parentd938f71d1a93ebc40a69b567d190f20c2445e524 (diff)
downloadstrace-1495ee586e0b6375f3d5164b1966265272224b4c.tar.gz
affinity: print cpuset of len 0 as "[]"
To be consistent with print_array_ex behaviour. * src/affinity.c (print_affinitylist): Handle "!len" and "!cpu" cases separately; print "[]" in the former. * tests/sched_xetaffinity.c: Add a check for a cpuset of size 0.
-rw-r--r--src/affinity.c13
-rw-r--r--tests/sched_xetaffinity.c13
2 files changed, 25 insertions, 1 deletions
diff --git a/src/affinity.c b/src/affinity.c
index 80699f67f..a829399a0 100644
--- a/src/affinity.c
+++ b/src/affinity.c
@@ -52,7 +52,18 @@ print_affinitylist(struct tcb *const tcp, const kernel_ulong_t addr,
void *cpu;
if (!verbose(tcp) || (exiting(tcp) && syserror(tcp)) ||
- !addr || !len || !(cpu = calloc(size, 1))) {
+ !addr) {
+ printaddr(addr);
+ return;
+ }
+
+ if (!len) {
+ tprint_array_begin();
+ tprint_array_end();
+ return;
+ }
+
+ if (!(cpu = calloc(size, 1))) {
printaddr(addr);
return;
}
diff --git a/tests/sched_xetaffinity.c b/tests/sched_xetaffinity.c
index b13348c31..77718db29 100644
--- a/tests/sched_xetaffinity.c
+++ b/tests/sched_xetaffinity.c
@@ -79,15 +79,28 @@ main(void)
printf("sched_getaffinity(%d%s, %u, [", pid, pid_str, cpuset_size);
const char *sep;
unsigned int i, cpu;
+ unsigned int first_cpu = -1U;
for (i = 0, cpu = 0, sep = ""; i < (unsigned) ret_size * 8; ++i) {
if (CPU_ISSET_S(i, (unsigned) ret_size, cpuset)) {
printf("%s%u", sep, i);
sep = ", ";
cpu = i;
+ if (first_cpu == -1U)
+ first_cpu = i;
}
}
printf("]) = %s\n", errstr);
+ long rc = setaffinity(pid, 0, ((char *) cpuset) + cpuset_size);
+ pidns_print_leader();
+ printf("sched_setaffinity(%d%s, 0, []) = %s\n",
+ pid, pid_str, sprintrc(rc));
+
+ rc = setaffinity(pid, 1, ((char *) cpuset) + cpuset_size);
+ pidns_print_leader();
+ printf("sched_setaffinity(%d%s, 1, %p) = %s\n",
+ pid, pid_str, ((char *) cpuset) + cpuset_size, sprintrc(rc));
+
CPU_ZERO_S(cpuset_size, cpuset);
CPU_SET_S(cpu, cpuset_size, cpuset);
if (setaffinity(pid, cpuset_size, cpuset))