All our numa logic was well encapsulated under #ifndef
NUMA_DISABLE (as ./configure --disable-numa), with the
exception of 1 case label. The reason it didn't create
any problems is because the sole consumer (top) itself
responded to the presence of #define NUMA_DISABLE too.
But if that option wasn't used, an oops still awaited.
When experimenting with a 32-bit library plus a 64-bit
kernel, a bug was revealed should the numa library not
have been found. Our 'reap' function must tolerate the
potential of a 0 return from that stacks_fetch_tics().
Now, if numa is desired but not possible, we'll be ok.
[ and, we'll build numa history from fresher sources ]
Signed-off-by: Jim Warner <james.warner@comcast.net>
this->result.stacks = this->anchor;
this->fetch.dirty_stacks = 1;
+ // callers beware, this might be zero (maybe no libnuma.so) ...
return this->result.total;
} // end: stacks_fetch_tics
return NULL;
break;
case STAT_REAP_CPUS_AND_NODES:
- if (0 > make_numa_hist(info))
- return NULL;
if (!stacks_fetch_tics(info, &info->cpus))
return NULL;
- if (!stacks_fetch_tics(info, &info->nodes))
+#ifndef NUMA_DISABLE
+ if (0 > make_numa_hist(info))
return NULL;
+ // tolerate an unexpected absence of libnuma.so ...
+ stacks_fetch_tics(info, &info->nodes);
+#endif
break;
default:
return NULL;