Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
don't eat the errno of when dlopen fails (but still remove the copied binary)
authorMartin Quinson <martin.quinson@loria.fr>
Thu, 31 Aug 2017 21:41:46 +0000 (23:41 +0200)
committerMartin Quinson <martin.quinson@loria.fr>
Thu, 31 Aug 2017 21:42:00 +0000 (23:42 +0200)
src/smpi/internals/smpi_global.cpp

index aa46baa..1ccc8bf 100644 (file)
@@ -605,10 +605,11 @@ int smpi_main(const char* executable, int argc, char *argv[])
 
         // Load the copy and resolve the entry point:
         void* handle = dlopen(target_executable.c_str(), RTLD_LAZY | RTLD_LOCAL | RTLD_DEEPBIND);
 
         // Load the copy and resolve the entry point:
         void* handle = dlopen(target_executable.c_str(), RTLD_LAZY | RTLD_LOCAL | RTLD_DEEPBIND);
+        int saved_errno = errno;
         if (xbt_cfg_get_boolean("smpi/keep-temps") == false)
           unlink(target_executable.c_str());
         if (handle == nullptr)
         if (xbt_cfg_get_boolean("smpi/keep-temps") == false)
           unlink(target_executable.c_str());
         if (handle == nullptr)
-          xbt_die("dlopen failed: %s (errno: %d -- %s)", dlerror(), errno, strerror(errno));
+          xbt_die("dlopen failed: %s (errno: %d -- %s)", dlerror(), saved_errno, strerror(saved_errno));
         smpi_entry_point_type entry_point = smpi_resolve_function(handle);
         if (not entry_point)
           xbt_die("Could not resolve entry point");
         smpi_entry_point_type entry_point = smpi_resolve_function(handle);
         if (not entry_point)
           xbt_die("Could not resolve entry point");