static int Numa_node_sel = -1;
#ifndef NUMA_DISABLE
static void *Libnuma_handle;
+static int stderr_save = -1;
#if defined(PRETEND_NUMA) || defined(PRETEND8CPUS)
static int Numa_max_node(void) { return 3; }
static int Numa_node_of_cpu(int num) { return (num % 4); }
// fill in missing Fieldstab members and build each window's columnhdr
zap_fieldstab();
+#ifndef NUMA_DISABLE
+ /* there's a chance that damn libnuma may spew to stderr so we gotta
+ make sure he does not corrupt poor ol' top's first output screen!
+ Yes, he provides some overridable 'weak' functions to change such
+ behavior but we can't exploit that since we don't follow a normal
+ ld route to symbol resolution (we use that dlopen() guy instead)! */
+ stderr_save = dup(fileno(stderr));
+ if (-1 < stderr_save && freopen("/dev/null", "w", stderr))
+ ; // avoid -Wunused-result
+#endif
+
// lastly, initialize a signal set used to throttle one troublesome signal
sigemptyset(&Sigwinch_set);
#ifdef SIGNALS_LESS
the normal non-interactive output optimization... */
if (!Cap_can_goto) PSU_CLREOS(0);
+#ifndef NUMA_DISABLE
+ /* we gotta reverse the stderr redirect which was employed in wins_stage_2
+ and needed because the two libnuma 'weak' functions were useless to us! */
+ if (-1 < stderr_save) {
+ dup2(stderr_save, fileno(stderr));
+ close(stderr_save);
+ stderr_save = -1;
+ }
+#endif
+
/* lastly, check auto-sized width needs for the next iteration */
if (AUTOX_MODE && Autox_found)
widths_resize();