--- Begin Message ---
Source: openmpi
Version: 1.6.5-2
Severity: important
Tags: patch
User: [email protected]
Usertags: hurd
Hi,
since the enabling of the test suite (thanks!), such test suite fails
on Hurd.
The problem is mostly located in the memory:linux MCA component: it gets
enabled as it provides (via glibc) the malloc hooks it looks for, thus
installing its own hooks. Such hooks though can be called very early in
the startup, causing troubles.
Attached there is a new *update* of the build_hurd patch, which disables
the memory:linux MCA component on Hurd. This results in all the tests
passing successfully.
Thanks (and sorry for yet another Hurd update),
--
Pino
Description: Fix build problems on hurd-i386
This patch allows Open MPI to build on Debian GNU/HURD.
.
Also, the memory:linux MCA component is disabled, since its use of POSIX API
in malloc hooks called very early at startup causes troubles.
Author: Pino Toscano <[email protected]>
Forwarded: partially
Last-Update: 2013-08-21
--- a/ompi/runtime/ompi_mpi_abort.c
+++ b/ompi/runtime/ompi_mpi_abort.c
@@ -53,10 +53,11 @@
bool kill_remote_of_intercomm)
{
int count = 0, i;
- char *msg, *host, hostname[MAXHOSTNAMELEN];
+ char *msg, *host = NULL;
pid_t pid = 0;
orte_process_name_t *abort_procs;
orte_std_cntr_t nabort_procs;
+ bool free_host = false;
/* Protection for recursive invocation */
if (have_been_invoked) {
@@ -70,8 +71,12 @@
if (orte_initialized) {
host = orte_process_info.nodename;
} else {
- gethostname(hostname, sizeof(hostname));
- host = hostname;
+ size_t host_length = 128;
+ do {
+ host_length *= 2;
+ host = realloc(host, host_length);
+ } while ((gethostname(host, host_length) == -1) && (errno == ENAMETOOLONG));
+ free_host = true;
}
pid = getpid();
--- a/ompi/runtime/ompi_mpi_finalize.c
+++ b/ompi/runtime/ompi_mpi_finalize.c
@@ -101,13 +101,18 @@
/* Note that if we're already finalized, we cannot raise an
MPI exception. The best that we can do is write something
to stderr. */
- char hostname[MAXHOSTNAMELEN];
+ char *hostname = NULL;
+ size_t hostname_length = 128;
pid_t pid = getpid();
- gethostname(hostname, sizeof(hostname));
+ do {
+ hostname_length *= 2;
+ hostname = realloc(hostname, hostname_length);
+ } while ((gethostname(hostname, hostname_length) == -1) && (errno == ENAMETOOLONG));
orte_show_help("help-mpi-runtime.txt",
"mpi_finalize:invoked_multiple_times",
true, hostname, pid);
+ free(hostname);
return MPI_ERR_OTHER;
}
--- a/opal/mca/base/mca_base_component_find.c
+++ b/opal/mca/base/mca_base_component_find.c
@@ -208,11 +208,16 @@
}
if (opal_list_get_end(found_components) == item) {
- char h[MAXHOSTNAMELEN];
- gethostname(h, sizeof(h));
+ char *h = NULL;
+ size_t h_length = 128;
+ do {
+ h_length *= 2;
+ h = realloc(h, h_length);
+ } while ((gethostname(h, h_length) == -1) && (errno == ENAMETOOLONG));
opal_show_help("help-mca-base.txt",
"find-available:not-valid", true,
h, type, requested_component_names[i]);
+ free(h);
return OPAL_ERR_NOT_FOUND;
}
}
--- a/opal/mca/base/mca_base_param.c
+++ b/opal/mca/base/mca_base_param.c
@@ -186,8 +186,14 @@
home = (char*)opal_home_directory();
if(NULL == cwd) {
+#if !defined(MAXPATHLEN) && defined(__GLIBC__)
+ cwd = get_current_dir_name();
+ if( NULL == cwd)
+#else
cwd = (char *) malloc(sizeof(char) * MAXPATHLEN);
- if( NULL == (cwd = getcwd(cwd, MAXPATHLEN) )) {
+ if( NULL == (cwd = getcwd(cwd, MAXPATHLEN) ))
+#endif
+ {
opal_output(0, "Error: Unable to get the current working directory\n");
cwd = strdup(".");
}
--- a/opal/util/stacktrace.c
+++ b/opal/util/stacktrace.c
@@ -437,8 +437,12 @@
mca_base_param_lookup_string (param, &string_value);
memset(&act, 0, sizeof(act));
+#ifdef SA_SIGINFO
act.sa_sigaction = show_stackframe;
act.sa_flags = SA_SIGINFO;
+#else
+ act.sa_handler = show_stackframe_handler;
+#endif
#ifdef SA_ONESHOT
act.sa_flags |= SA_ONESHOT;
#else
--- a/orte/mca/odls/base/odls_base_default_fns.c
+++ b/orte/mca/odls/base/odls_base_default_fns.c
@@ -1370,8 +1370,13 @@
orte_local_rank_t local_rank;
orte_node_rank_t node_rank;
char *pathenv = NULL, *mpiexec_pathenv = NULL;
+#if !defined(MAXPATHLEN) && defined(__GLIBC__)
+ char *basedir=NULL;
+ char *dir=NULL;
+#else
char basedir[MAXPATHLEN];
char dir[MAXPATHLEN];
+#endif
char **argvptr;
char *full_search;
char **argvsav=NULL;
@@ -1388,7 +1393,11 @@
* bouncing around as we execute various apps, but we will always return
* to this place as our default directory
*/
+#if !defined(MAXPATHLEN) && defined(__GLIBC__)
+ basedir = get_current_dir_name();
+#else
getcwd(basedir, sizeof(basedir));
+#endif
/* find the jobdat for this job */
jobdat = NULL;
@@ -1621,7 +1630,11 @@
* again not match getcwd! This is beyond our control - we are only
* ensuring they start out matching.
*/
+#if !defined(MAXPATHLEN) && defined(__GLIBC__)
+ dir = get_current_dir_name();
+#else
getcwd(dir, sizeof(dir));
+#endif
opal_setenv("PWD", dir, true, &app->env);
/* Search for the OMPI_exec_path and PATH settings in the environment. */
@@ -2118,6 +2131,10 @@
GETOUT:
opal_condition_signal(&orte_odls_globals.cond);
OPAL_THREAD_UNLOCK(&orte_odls_globals.mutex);
+#if !defined(MAXPATHLEN) && defined(__GLIBC__)
+ free(basedir);
+ free(dir);
+#endif
return rc;
}
--- a/orte/orted/orted_main.c
+++ b/orte/orted/orted_main.c
@@ -228,7 +228,8 @@
int ret = 0;
int fd;
opal_cmd_line_t *cmd_line = NULL;
- char log_file[PATH_MAX];
+ char *log_file = NULL;
+ size_t log_file_len;
char *jobidstring;
char *rml_uri;
int i;
@@ -482,13 +483,16 @@
}
/* define a log file name in the session directory */
- snprintf(log_file, PATH_MAX, "output-orted-%s-%s.log",
+ log_file_len = 13 + strlen(jobidstring) + 1 + strlen(orte_process_info.nodename) + 4 + 1;
+ log_file = malloc(log_file_len);
+ snprintf(log_file, log_file_len, "output-orted-%s-%s.log",
jobidstring, orte_process_info.nodename);
log_path = opal_os_path(false,
orte_process_info.tmpdir_base,
orte_process_info.top_session_dir,
log_file,
NULL);
+ free(log_file);
fd = open(log_path, O_RDWR|O_CREAT|O_TRUNC, 0640);
if (fd < 0) {
--- a/orte/util/context_fns.c
+++ b/orte/util/context_fns.c
@@ -55,10 +55,12 @@
{
bool good = true;
const char *tmp;
+#if 0 /* 'hostname' looks unused... */
char hostname[MAXHOSTNAMELEN];
/* Use hostname in a few messages below */
gethostname(hostname, sizeof(hostname));
+#endif
/* If we want to chdir and the chdir fails (for any reason -- such
as if the dir doesn't exist, it isn't a dir, we don't have
--- a/opal/mca/pstat/darwin/configure.m4
+++ b/opal/mca/pstat/darwin/configure.m4
@@ -23,9 +23,9 @@
# -----------------------------------------------------------
AC_DEFUN([MCA_pstat_darwin_CONFIG],[
OMPI_VAR_SCOPE_PUSH([paff_darwin_happy])
- # check to see if we have <mach/mach_host.h>
+ # check to see if we have <mach/clock.h>
# as this is a Darwin-specific thing
- AC_CHECK_HEADER([mach/mach_host.h], [paff_darwin_happy=yes], [paff_darwin_happy=no])
+ AC_CHECK_HEADER([mach/clock.h], [paff_darwin_happy=yes], [paff_darwin_happy=no])
AS_IF([test "$paff_darwin_happy" = "yes"], [$1], [$2])
OMPI_VAR_SCOPE_POP
--- a/opal/mca/sysinfo/darwin/configure.m4
+++ b/opal/mca/sysinfo/darwin/configure.m4
@@ -12,9 +12,9 @@
# -----------------------------------------------------------
AC_DEFUN([MCA_sysinfo_darwin_CONFIG],[
OMPI_VAR_SCOPE_PUSH([sysinfo_darwin_happy])
- # check to see if we have <mach/mach_host.h>
+ # check to see if we have <mach/clock.h>
# as this is a Darwin-specific thing
- AC_CHECK_HEADER([mach/mach_host.h], [sysinfo_darwin_happy=yes], [sysinfo_darwin_happy=no])
+ AC_CHECK_HEADER([mach/clock.h], [sysinfo_darwin_happy=yes], [sysinfo_darwin_happy=no])
AS_IF([test "$sysinfo_darwin_happy" = "yes"], [$1], [$2])
OMPI_VAR_SCOPE_POP
--- a/opal/mca/shmem/mmap/shmem_mmap_module.c
+++ b/opal/mca/shmem/mmap/shmem_mmap_module.c
@@ -61,6 +61,10 @@
/* for tons of debug output: -mca shmem_base_verbose 70 */
+#ifndef MAXHOSTNAMELEN
+# define MAXHOSTNAMELEN 256
+#endif
+
/* ////////////////////////////////////////////////////////////////////////// */
/*local functions */
/* local functions */
--- a/opal/mca/shmem/posix/shmem_posix_common_utils.h
+++ b/opal/mca/shmem/posix/shmem_posix_common_utils.h
@@ -45,6 +45,10 @@
OPAL_DECLSPEC extern int shmem_posix_shm_open(char *posix_file_name_buff,
size_t size);
+#ifndef MAXHOSTNAMELEN
+# define MAXHOSTNAMELEN 256
+#endif
+
END_C_DECLS
#endif /* OPAL_SHMEM_POSIX_COMMON_UTILS_H */
--- a/opal/mca/shmem/sysv/shmem_sysv_module.c
+++ b/opal/mca/shmem/sysv/shmem_sysv_module.c
@@ -65,6 +65,10 @@
/* for tons of debug output: -mca shmem_base_verbose 70 */
+#ifndef MAXHOSTNAMELEN
+# define MAXHOSTNAMELEN 256
+#endif
+
/* ////////////////////////////////////////////////////////////////////////// */
/* local functions */
static int
--- a/opal/mca/memory/linux/configure.m4
+++ b/opal/mca/memory/linux/configure.m4
@@ -58,6 +58,10 @@
[memory_linux_ptmalloc2_happy=yes
memory_linux_ummu_happy=no])])
+ AS_IF([echo "$host_os" | grep '^gnu' >/dev/null 2>/dev/null],
+ [memory_linux_ptmalloc2_happy=no
+ memory_linux_ummu_happy=no])
+
######################################################################
# ptmalloc2
######################################################################
--- End Message ---