summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Warner <james.warner@comcast.net>2013-11-07 00:00:00 -0600
committerCraig Small <csmall@enc.com.au>2013-11-25 20:57:32 +1100
commitbdb2fe005616bb40f2da53da02b01f91cabf9a87 (patch)
treef59a44a13e80c216b8aba13b8337c27a49881e2c
parent9c776bbcde2260f454b51b86d46aafcc2f7dc71c (diff)
downloadprocps-ng-bdb2fe005616bb40f2da53da02b01f91cabf9a87.tar.gz
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>
-rw-r--r--top/top.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/top/top.c b/top/top.c
index a48a5b9..e619ddd 100644
--- a/top/top.c
+++ b/top/top.c
@@ -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) {