Open MPI logo

Open MPI Development Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Development mailing list

Subject: Re: [OMPI devel] [OMPI svn-full] svn:open-mpi r20003 (Solaris malloc.h issue)
From: George Bosilca (bosilca_at_[hidden])
Date: 2009-04-16 18:18:27


I don't think this is correct. We are not supposed to include anything
before the ompi_config.h. Moreover, in the case we redefine what
malloc is, this will be the only piece of code that will use the real
malloc.

I wonder why we need to include malloc.h there? We don't allocate any
memory in this file ...

   george.

On Apr 16, 2009, at 18:09 , Ethan Mallove wrote:

> Hi,
>
> I think I have a better fix for this issue. It is to simply #include
> <malloc.h> *before* ompi_config.h.
>
> --- ompi/mca/common/mx/common_mx.c
> +++ ompi/mca/common/mx/common_mx.c
> @@ -19,15 +19,16 @@
> * $HEADER$
> */
>
> +#ifdef HAVE_MALLOC_H
> +#include <malloc.h>
> +#endif
> +
> #include "ompi_config.h"
> #include "orte/util/show_help.h"
> #include "ompi/constants.h"
> #include "common_mx.h"
>
> #include <errno.h>
> -#ifdef HAVE_MALLOC_H
> -#include <malloc.h>
> -#endif
> #include "opal/memoryhooks/memory.h"
> #include "opal/mca/base/mca_base_param.h"
> #include "ompi/runtime/params.h"
>
> The reason for doing this is because ompi_config.h (which includes
> ompi_config_bottom.h) #defines "malloc", so we end up with OMPI code
> getting spliced into the Solaris /usr/include/malloc.h code.
>
> Is this fix okay?
>
> -Ethan
>
> On Wed, Dec/10/2008 04:29:31PM, Ethan Mallove wrote:
>> Hi Patrick,
>>
>> r20003 seems to break MX support on Solaris.
>>
>> $ cd ompi/mca/common/mx
>> $ make
>> ...
>> "/usr/include/malloc.h", line 46: syntax error before or at: (
>> "/usr/include/malloc.h", line 47: syntax error before or at: (
>> "/usr/include/malloc.h", line 48: syntax error before or at: (
>> "/usr/include/malloc.h", line 48: cannot have void object: size_t
>> "/usr/include/malloc.h", line 48: identifier redeclared: size_t
>> ... <4000 more lines of compiler errors> ...
>>
>> The below patch makes it so opal/util/malloc.h is used instead of
>> /usr/include/malloc.h and the compiler errors go away. (I also needed
>> to include errno.h.) Would this be okay to do?
>>
>> diff -r 347f52a3713f ompi/mca/common/mx/common_mx.c
>> --- ompi/mca/common/mx/common_mx.c
>> +++ ompi/mca/common/mx/common_mx.c
>> @@ -23,9 +23,8 @@
>> #include "ompi/constants.h"
>> #include "common_mx.h"
>>
>> -#ifdef HAVE_MALLOC_H
>> -#include <malloc.h>
>> -#endif
>> +#include <errno.h>
>> +#include "opal/util/malloc.h"
>> #include "opal/memoryhooks/memory.h"
>> #include "opal/mca/base/mca_base_param.h"
>> #include "ompi/runtime/params.h"
>>
>> I tested the above on Solaris and Linux with SunStudio.
>>
>> Regards,
>> Ethan
>>
>>
>> On Fri, Nov/14/2008 11:17:59PM, patrick_at_[hidden] wrote:
>>> Author: patrick
>>> Date: 2008-11-14 23:17:58 EST (Fri, 14 Nov 2008)
>>> New Revision: 20003
>>> URL: https://svn.open-mpi.org/trac/ompi/changeset/20003
>>>
>>> Log:
>>> Define a "fake" mpool to provide a memory release callback for the
>>> memory hooks (munmap) and initialize the mallopt component, and
>>> nothing else.
>>> Use this mpool in the MX common initialization, supporting both BTL
>>> and MTL. Automatically set the MX_RCACHE environment variable to
>>> enable registration cache in MX.
>>>
>>> Tested with success for munmap() and large free().
>>>
>>>
>>> Added:
>>> trunk/ompi/mca/mpool/fake/
>>> trunk/ompi/mca/mpool/fake/Makefile.am
>>> trunk/ompi/mca/mpool/fake/configure.params
>>> trunk/ompi/mca/mpool/fake/mpool_fake.h
>>> trunk/ompi/mca/mpool/fake/mpool_fake_component.c
>>> trunk/ompi/mca/mpool/fake/mpool_fake_module.c
>>> Text files modified:
>>> trunk/ompi/mca/common/mx/common_mx.c | 56 ++++++++++++++++++++
>>> +++++++++++++++++++
>>> 1 files changed, 55 insertions(+), 1 deletions(-)
>>>
>>> Modified: trunk/ompi/mca/common/mx/common_mx.c
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> ====================================================================
>>> --- trunk/ompi/mca/common/mx/common_mx.c (original)
>>> +++ trunk/ompi/mca/common/mx/common_mx.c 2008-11-14 23:17:58 EST
>>> (Fri, 14 Nov 2008)
>>> @@ -9,6 +9,8 @@
>>> * University of Stuttgart. All rights
>>> reserved.
>>> * Copyright (c) 2004-2006 The Regents of the University of
>>> California.
>>> * All rights reserved.
>>> + * Copyright (c) 2008 Myricom. All rights reserved.
>>> + *
>>> * $COPYRIGHT$
>>> *
>>> * Additional copyrights may follow
>>> @@ -21,11 +23,29 @@
>>> #include "ompi/constants.h"
>>> #include "common_mx.h"
>>>
>>> +#ifdef HAVE_MALLOC_H
>>> +#include <malloc.h>
>>> +#endif
>>> +#include "opal/memoryhooks/memory.h"
>>> +#include "opal/mca/base/mca_base_param.h"
>>> +#include "ompi/runtime/params.h"
>>> +#include "ompi/mca/mpool/mpool.h"
>>> +#include "ompi/mca/mpool/base/base.h"
>>> +#include "ompi/mca/mpool/fake/mpool_fake.h"
>>> +
>>> +
>>> +int mx__regcache_clean(void *ptr, size_t size);
>>> +
>>> static int ompi_common_mx_initialize_ref_cnt = 0;
>>> +static mca_mpool_base_module_t *ompi_common_mx_fake_mpool = 0;
>>> +
>>> int
>>> ompi_common_mx_initialize(void)
>>> {
>>> mx_return_t mx_return;
>>> + struct mca_mpool_base_resources_t mpool_resources;
>>> + int index, value;
>>> +
>>> ompi_common_mx_initialize_ref_cnt++;
>>>
>>> if(ompi_common_mx_initialize_ref_cnt == 1) {
>>> @@ -35,7 +55,37 @@
>>> * library does not exit the application.
>>> */
>>> mx_set_error_handler(MX_ERRORS_RETURN);
>>> -
>>> +
>>> + /* If we have a memory manager available, and
>>> + mpi_leave_pinned == -1, then set mpi_leave_pinned to 1.
>>> +
>>> + We have a memory manager if:
>>> + - we have both FREE and MUNMAP support
>>> + - we have MUNMAP support and the linux mallopt */
>>> + value = opal_mem_hooks_support_level();
>>> + if (((value & (OPAL_MEMORY_FREE_SUPPORT |
>>> OPAL_MEMORY_MUNMAP_SUPPORT))
>>> + == (OPAL_MEMORY_FREE_SUPPORT | OPAL_MEMORY_MUNMAP_SUPPORT))
>>> + || ((value & OPAL_MEMORY_MUNMAP_SUPPORT) &&
>>> + OMPI_MPOOL_BASE_HAVE_LINUX_MALLOPT)) {
>>> + index = mca_base_param_find("mpi", NULL, "leave_pinned");
>>> + if (index >= 0)
>>> + if ((mca_base_param_lookup_int(index, &value) ==
>>> OPAL_SUCCESS)
>>> + && (value == -1)) {
>>> +
>>> + ompi_mpi_leave_pinned = 1;
>>> + setenv("MX_RCACHE", "2", 1);
>>> + mpool_resources.regcache_clean = mx__regcache_clean;
>>> + ompi_common_mx_fake_mpool =
>>> + mca_mpool_base_module_create("fake", NULL, &mpool_resources);
>>> + if (!ompi_common_mx_fake_mpool) {
>>> + ompi_mpi_leave_pinned = 0;
>>> + setenv("MX_RCACHE", "0", 1);
>>> + opal_output(0, "Error creating fake mpool (error %s)\n",
>>> + strerror(errno));
>>> + }
>>> + }
>>> + }
>>> +
>>> /* initialize the mx library */
>>> mx_return = mx_init();
>>>
>>> @@ -57,6 +107,10 @@
>>> mx_return_t mx_return;
>>> ompi_common_mx_initialize_ref_cnt--;
>>> if( 0 == ompi_common_mx_initialize_ref_cnt ) {
>>> +
>>> + if (ompi_common_mx_fake_mpool)
>>> + mca_mpool_base_module_destroy(ompi_common_mx_fake_mpool);
>>> +
>>> mx_return = mx_finalize();
>>> if(mx_return != MX_SUCCESS){
>>> opal_output(0, "Error in mx_finalize (error %s)\n",
>>> mx_strerror(mx_return));
>>>
>>> Added: trunk/ompi/mca/mpool/fake/Makefile.am
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> ====================================================================
>>> --- (empty file)
>>> +++ trunk/ompi/mca/mpool/fake/Makefile.am 2008-11-14 23:17:58 EST
>>> (Fri, 14 Nov 2008)
>>> @@ -0,0 +1,56 @@
>>> +#
>>> +# Copyright (c) 2004-2005 The Trustees of Indiana University and
>>> Indiana
>>> +# University Research and Technology
>>> +# Corporation. All rights reserved.
>>> +# Copyright (c) 2004-2005 The University of Tennessee and The
>>> University
>>> +# of Tennessee Research Foundation. All
>>> rights
>>> +# reserved.
>>> +# Copyright (c) 2004-2005 High Performance Computing Center
>>> Stuttgart,
>>> +# University of Stuttgart. All rights
>>> reserved.
>>> +# Copyright (c) 2004-2005 The Regents of the University of
>>> California.
>>> +# All rights reserved.
>>> +# Copyright (c) 2008 Myricom. All rights reserved.
>>> +#
>>> +# $COPYRIGHT$
>>> +#
>>> +# Additional copyrights may follow
>>> +#
>>> +# $HEADER$
>>> +#
>>> +
>>> +AM_CPPFLAGS = $(mpool_fake_CPPFLAGS)
>>> +
>>> +sources = \
>>> + mpool_fake_module.c \
>>> + mpool_fake_component.c
>>> +
>>> +if WANT_INSTALL_HEADERS
>>> +ompidir = $(includedir)/openmpi/ompi/mca/mpool/fake
>>> +ompi_HEADERS = mpool_fake.h
>>> +else
>>> +ompidir = $(includedir)
>>> +ompi_HEADERS =
>>> +endif
>>> +
>>> +# Make the output library in this directory, and name it either
>>> +# mca_<type>_<name>.la (for DSO builds) or libmca_<type>_<name>.la
>>> +# (for static builds).
>>> +
>>> +if OMPI_BUILD_mpool_fake_DSO
>>> +component_noinst =
>>> +component_install = mca_mpool_fake.la
>>> +else
>>> +component_noinst = libmca_mpool_fake.la
>>> +component_install =
>>> +endif
>>> +
>>> +mcacomponentdir = $(pkglibdir)
>>> +mcacomponent_LTLIBRARIES = $(component_install)
>>> +mca_mpool_fake_la_SOURCES = $(sources)
>>> +mca_mpool_fake_la_LDFLAGS = -module -avoid-version
>>> +mca_mpool_fake_la_LIBADD = $(mpool_fake_LIBS)
>>> +
>>> +noinst_LTLIBRARIES = $(component_noinst)
>>> +libmca_mpool_fake_la_SOURCES = $(sources)
>>> +libmca_mpool_fake_la_LDFLAGS = -module -avoid-version
>>> +libmca_mpool_fake_la_LIBADD = $(mpool_fake_LIBS)
>>>
>>> Added: trunk/ompi/mca/mpool/fake/configure.params
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> ====================================================================
>>> --- (empty file)
>>> +++ trunk/ompi/mca/mpool/fake/configure.params 2008-11-14 23:17:58
>>> EST (Fri, 14 Nov 2008)
>>> @@ -0,0 +1,24 @@
>>> +# -*- shell-script -*-
>>> +#
>>> +# Copyright (c) 2004-2005 The Trustees of Indiana University and
>>> Indiana
>>> +# University Research and Technology
>>> +# Corporation. All rights reserved.
>>> +# Copyright (c) 2004-2005 The University of Tennessee and The
>>> University
>>> +# of Tennessee Research Foundation. All
>>> rights
>>> +# reserved.
>>> +# Copyright (c) 2004-2005 High Performance Computing Center
>>> Stuttgart,
>>> +# University of Stuttgart. All rights
>>> reserved.
>>> +# Copyright (c) 2004-2005 The Regents of the University of
>>> California.
>>> +# All rights reserved.
>>> +# Copyright (c) 2008 Myricom. All rights reserved.
>>> +#
>>> +# $COPYRIGHT$
>>> +#
>>> +# Additional copyrights may follow
>>> +#
>>> +# $HEADER$
>>> +#
>>> +
>>> +# Specific to this module
>>> +
>>> +PARAM_CONFIG_FILES="Makefile"
>>>
>>> Added: trunk/ompi/mca/mpool/fake/mpool_fake.h
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> ====================================================================
>>> --- (empty file)
>>> +++ trunk/ompi/mca/mpool/fake/mpool_fake.h 2008-11-14 23:17:58 EST
>>> (Fri, 14 Nov 2008)
>>> @@ -0,0 +1,74 @@
>>> +/*
>>> + * Copyright (c) 2004-2005 The Trustees of Indiana University and
>>> Indiana
>>> + * University Research and Technology
>>> + * Corporation. All rights reserved.
>>> + * Copyright (c) 2004-2006 The University of Tennessee and The
>>> University
>>> + * of Tennessee Research Foundation. All
>>> rights
>>> + * reserved.
>>> + * Copyright (c) 2004-2005 High Performance Computing Center
>>> Stuttgart,
>>> + * University of Stuttgart. All rights
>>> reserved.
>>> + * Copyright (c) 2004-2005 The Regents of the University of
>>> California.
>>> + * All rights reserved.
>>> + * Copyright (c) 2008 Myricom. All rights reserved.
>>> + *
>>> + * $COPYRIGHT$
>>> + *
>>> + * Additional copyrights may follow
>>> + *
>>> + * $HEADER$
>>> + */
>>> +/**
>>> + * @file
>>> + */
>>> +
>>> +#ifndef MCA_MPOOL_FAKE_H
>>> +#define MCA_MPOOL_FAKE_H
>>> +
>>> +#include "ompi/mca/mpool/mpool.h"
>>> +
>>> +#if defined(c_plusplus) || defined(__cplusplus)
>>> +extern "C" {
>>> +#endif
>>> +
>>> +typedef struct mca_mpool_fake_component_t {
>>> + mca_mpool_base_component_t super;
>>> +} mca_mpool_fake_component_t;
>>> +
>>> +OMPI_DECLSPEC extern mca_mpool_fake_component_t
>>> mca_mpool_fake_component;
>>> +
>>> +typedef struct mca_mpool_base_resources_t {
>>> + int (*regcache_clean)(void *ptr, size_t size);
>>> +} mca_mpool_base_resources_t;
>>> +
>>> +typedef struct mca_mpool_fake_module_t {
>>> + mca_mpool_base_module_t super;
>>> + mca_mpool_base_resources_t resources;
>>> +} mca_mpool_fake_module_t;
>>> +
>>> +/*
>>> + * Initializes the mpool module.
>>> + */
>>> +void mca_mpool_fake_module_init(mca_mpool_fake_module_t *mpool);
>>> +
>>> +/**
>>> + * unregister all registration covering the block of memory
>>> + */
>>> +int mca_mpool_fake_release_memory(mca_mpool_base_module_t* mpool,
>>> void *base,
>>> + size_t size);
>>> +
>>> +/**
>>> + * finalize mpool
>>> + */
>>> +void mca_mpool_fake_finalize(struct mca_mpool_base_module_t
>>> *mpool);
>>> +
>>> +/**
>>> + * Fault Tolerance Event Notification Function
>>> + * @param state Checkpoint Stae
>>> + * @return OMPI_SUCCESS or failure status
>>> + */
>>> +int mca_mpool_fake_ft_event(int state);
>>> +
>>> +#if defined(c_plusplus) || defined(__cplusplus)
>>> +}
>>> +#endif
>>> +#endif
>>>
>>> Added: trunk/ompi/mca/mpool/fake/mpool_fake_component.c
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> ====================================================================
>>> --- (empty file)
>>> +++ trunk/ompi/mca/mpool/fake/mpool_fake_component.c 2008-11-14
>>> 23:17:58 EST (Fri, 14 Nov 2008)
>>> @@ -0,0 +1,87 @@
>>> +/*
>>> + * Copyright (c) 2004-2005 The Trustees of Indiana University and
>>> Indiana
>>> + * University Research and Technology
>>> + * Corporation. All rights reserved.
>>> + * Copyright (c) 2004-2005 The University of Tennessee and The
>>> University
>>> + * of Tennessee Research Foundation. All
>>> rights
>>> + * reserved.
>>> + * Copyright (c) 2004-2005 High Performance Computing Center
>>> Stuttgart,
>>> + * University of Stuttgart. All rights
>>> reserved.
>>> + * Copyright (c) 2004-2005 The Regents of the University of
>>> California.
>>> + * All rights reserved.
>>> + * Copyright (c) 2008 Myricom. All rights reserved.
>>> + *
>>> + * $COPYRIGHT$
>>> + *
>>> + * Additional copyrights may follow
>>> + *
>>> + * $HEADER$
>>> + */
>>> +
>>> +#define OMPI_DISABLE_ENABLE_MEM_DEBUG 1
>>> +#include "ompi_config.h"
>>> +#include "orte/util/show_help.h"
>>> +#include "opal/mca/base/base.h"
>>> +#include "opal/mca/base/mca_base_param.h"
>>> +#include "mpool_fake.h"
>>> +#include "orte/util/proc_info.h"
>>> +#ifdef HAVE_UNISTD_H
>>> +#include <unistd.h>
>>> +#endif
>>> +#ifdef HAVE_MALLOC_H
>>> +#include <malloc.h>
>>> +#endif
>>> +
>>> +/*
>>> + * Local functions
>>> + */
>>> +static int mca_mpool_fake_open(void);
>>> +static mca_mpool_base_module_t* mca_mpool_fake_init(
>>> + struct mca_mpool_base_resources_t* resources);
>>> +
>>> +mca_mpool_fake_component_t mca_mpool_fake_component = {
>>> + {
>>> + /* First, the mca_base_component_t struct containing meta
>>> + information about the component itself */
>>> +
>>> + {
>>> + MCA_MPOOL_BASE_VERSION_2_0_0,
>>> +
>>> + "fake", /* MCA component name */
>>> + OMPI_MAJOR_VERSION, /* MCA component major version */
>>> + OMPI_MINOR_VERSION, /* MCA component minor version */
>>> + OMPI_RELEASE_VERSION, /* MCA component release version
>>> */
>>> + mca_mpool_fake_open, /* component open */
>>> + NULL
>>> + },
>>> + {
>>> + /* The component is checkpoint ready */
>>> + MCA_BASE_METADATA_PARAM_CHECKPOINT
>>> + },
>>> +
>>> + mca_mpool_fake_init
>>> + }
>>> +};
>>> +
>>> +/**
>>> + * component open/close/init function
>>> + */
>>> +static int mca_mpool_fake_open(void)
>>> +{
>>> + return OMPI_SUCCESS;
>>> +}
>>> +
>>> +static mca_mpool_base_module_t* mca_mpool_fake_init(
>>> + struct mca_mpool_base_resources_t* resources)
>>> +{
>>> + mca_mpool_fake_module_t* mpool_module;
>>> +
>>> + mpool_module = (mca_mpool_fake_module_t*)
>>> + malloc(sizeof(mca_mpool_fake_module_t));
>>> +
>>> + mpool_module->resources = *resources;
>>> +
>>> + mca_mpool_fake_module_init(mpool_module);
>>> +
>>> + return &mpool_module->super;
>>> +}
>>>
>>> Added: trunk/ompi/mca/mpool/fake/mpool_fake_module.c
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> ====================================================================
>>> --- (empty file)
>>> +++ trunk/ompi/mca/mpool/fake/mpool_fake_module.c 2008-11-14
>>> 23:17:58 EST (Fri, 14 Nov 2008)
>>> @@ -0,0 +1,72 @@
>>> +/* -*- Mode: C; c-basic-offset:4 ; -*- */
>>> +/*
>>> + * Copyright (c) 2004-2005 The Trustees of Indiana University and
>>> Indiana
>>> + * University Research and Technology
>>> + * Corporation. All rights reserved.
>>> + * Copyright (c) 2004-2007 The University of Tennessee and The
>>> University
>>> + * of Tennessee Research Foundation. All
>>> rights
>>> + * reserved.
>>> + * Copyright (c) 2004-2005 High Performance Computing Center
>>> Stuttgart,
>>> + * University of Stuttgart. All rights
>>> reserved.
>>> + * Copyright (c) 2004-2005 The Regents of the University of
>>> California.
>>> + * All rights reserved.
>>> + * Copyright (c) 2008 Myricom. All rights reserved.
>>> + *
>>> + * $COPYRIGHT$
>>> + *
>>> + * Additional copyrights may follow
>>> + *
>>> + * $HEADER$
>>> + */
>>> +
>>> +#define OMPI_DISABLE_ENABLE_MEM_DEBUG 1
>>> +#include "ompi_config.h"
>>> +#include "opal/include/opal/align.h"
>>> +#include "orte/util/proc_info.h"
>>> +#include "orte/util/name_fns.h"
>>> +#include "orte/runtime/orte_globals.h"
>>> +#include "orte/util/show_help.h"
>>> +#include "mpool_fake.h"
>>> +#include <errno.h>
>>> +#include <string.h>
>>> +#include "ompi/mca/mpool/base/base.h"
>>> +#include "ompi/runtime/params.h"
>>> +
>>> +/*
>>> + * Initializes the mpool module.
>>> + */
>>> +void mca_mpool_fake_module_init(mca_mpool_fake_module_t* mpool)
>>> +{
>>> + mpool->super.mpool_component = &mca_mpool_fake_component.super;
>>> + mpool->super.mpool_base = NULL; /* no base .. */
>>> + mpool->super.mpool_alloc = NULL;
>>> + mpool->super.mpool_realloc = NULL;
>>> + mpool->super.mpool_free = NULL;
>>> + mpool->super.mpool_register = NULL;
>>> + mpool->super.mpool_find = NULL;
>>> + mpool->super.mpool_deregister = NULL;
>>> + mpool->super.mpool_release_memory =
>>> mca_mpool_fake_release_memory;
>>> + mpool->super.mpool_finalize = mca_mpool_fake_finalize;
>>> + mpool->super.mpool_ft_event = mca_mpool_fake_ft_event;
>>> +}
>>> +
>>> +
>>> +int mca_mpool_fake_release_memory(struct mca_mpool_base_module_t
>>> *mpool,
>>> + void *base, size_t size)
>>> +{
>>> + mca_mpool_fake_module_t *mpool_module =
>>> (mca_mpool_fake_module_t*)mpool;
>>> +
>>> + mpool_module->resources.regcache_clean(base, size);
>>> +
>>> + return OMPI_SUCCESS;
>>> +}
>>> +
>>> +void mca_mpool_fake_finalize(struct mca_mpool_base_module_t *mpool)
>>> +{
>>> + ;
>>> +}
>>> +
>>> +int mca_mpool_fake_ft_event(int state)
>>> +{
>>> + return OMPI_SUCCESS;
>>> +}
>>> _______________________________________________
>>> svn-full mailing list
>>> svn-full_at_[hidden]
>>> http://www.open-mpi.org/mailman/listinfo.cgi/svn-full
>> _______________________________________________
>> devel mailing list
>> devel_at_[hidden]
>> http://www.open-mpi.org/mailman/listinfo.cgi/devel
> _______________________________________________
> devel mailing list
> devel_at_[hidden]
> http://www.open-mpi.org/mailman/listinfo.cgi/devel