top: add some flexibility to dlopen() for numa support
A recent libnuma potential corruption problem solution suggests that libnuma could change in the future so as to not spew to stderr. This then raises a question how top could exploit any such library change since we are currently locked into version #1 of the library by way of our dlopen("libnuma.so.1", RTLD_LAZY) runtime call. While not an ultimate solution, this commit will first try for the most recent version of that library during top's startup before trying the original libnuma.so.1. We do this via the unqualified library soname symlink. For this new dlopen() call to succeed, technically the numa 'devel' package would usually have been required, but that's not always true with every distro. And when the libnuma.so symlink isn't present, it can always be manually added should a newer & better behaved library arrive & users tire of the stderr warning at top exit. Reference(s): commit 24bd950cb2e1722d459461f0f9c0c30a4b9ffdaa Signed-off-by: Jim Warner <james.warner@comcast.net>
This commit is contained in:
parent
9c776bbcde
commit
bdb2fe0056
@ -3246,8 +3246,9 @@ static void before (char *me) {
|
||||
#if defined(PRETEND_NUMA) || defined(PRETEND8CPUS)
|
||||
Numa_node_tot = Numa_max_node() + 1;
|
||||
#else
|
||||
Libnuma_handle = dlopen("libnuma.so.1", RTLD_LAZY);
|
||||
if (Libnuma_handle) {
|
||||
// we'll try for the most recent version, then a version we know works...
|
||||
if ((Libnuma_handle = dlopen("libnuma.so", RTLD_LAZY))
|
||||
|| (Libnuma_handle = dlopen("libnuma.so.1", RTLD_LAZY))) {
|
||||
Numa_max_node = dlsym(Libnuma_handle, "numa_max_node");
|
||||
Numa_node_of_cpu = dlsym(Libnuma_handle, "numa_node_of_cpu");
|
||||
if (Numa_max_node && Numa_node_of_cpu)
|
||||
@ -3265,7 +3266,7 @@ static void before (char *me) {
|
||||
#endif
|
||||
// lastly, establish a robust signals environment
|
||||
sigemptyset(&sa.sa_mask);
|
||||
// with user position perserved through SIGWINCH, we must avoid SA_RESTART
|
||||
// with user position preserved through SIGWINCH, we must avoid SA_RESTART
|
||||
sa.sa_flags = 0;
|
||||
for (i = SIGRTMAX; i; i--) {
|
||||
switch (i) {
|
||||
|
Loading…
Reference in New Issue
Block a user