]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
DEV: ncpu: also emulate sysconf() for _SC_NPROCESSORS_*
authorWilly Tarreau <w@1wt.eu>
Thu, 13 Mar 2025 12:35:30 +0000 (13:35 +0100)
committerWilly Tarreau <w@1wt.eu>
Fri, 14 Mar 2025 17:30:30 +0000 (18:30 +0100)
This is also needed in order to make the requested number of CPUs
appear. For now we don't reroute to the original sysconf() call so
we return -1,EINVAL for all other info.

dev/ncpu/ncpu.c

index cdc91eb33eb8fd85b59cea01a012ff660f46da86..e96961c0956ff71671f33133b2cd7de00dfd29ab 100644 (file)
@@ -1,4 +1,5 @@
 #define _GNU_SOURCE
+#include <errno.h>
 #include <limits.h>
 #include <sched.h>
 #include <stdio.h>
 
 static char prog_full_path[PATH_MAX];
 
+long sysconf(int name)
+{
+       if (name == _SC_NPROCESSORS_ONLN ||
+           name == _SC_NPROCESSORS_CONF) {
+               const char *ncpu = getenv("NCPU");
+               int n;
+
+               n = ncpu ? atoi(ncpu) : CPU_SETSIZE;
+               if (n < 0 || n > CPU_SETSIZE)
+                       n = CPU_SETSIZE;
+               return n;
+       }
+       errno = EINVAL;
+       return -1;
+}
+
 /* return a cpu_set having the first $NCPU set */
 int sched_getaffinity(pid_t pid, size_t cpusetsize, cpu_set_t *mask)
 {