diff options
author | Eugene Syromyatnikov <evgsyr@gmail.com> | 2021-09-19 23:32:51 +0200 |
---|---|---|
committer | Eugene Syromyatnikov <evgsyr@gmail.com> | 2021-10-12 00:35:30 +0200 |
commit | 1495ee586e0b6375f3d5164b1966265272224b4c (patch) | |
tree | 53b7a3ad6d45195adc596983542de22b11226867 | |
parent | d938f71d1a93ebc40a69b567d190f20c2445e524 (diff) | |
download | strace-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.c | 13 | ||||
-rw-r--r-- | tests/sched_xetaffinity.c | 13 |
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)) |