1
1

Merge pull request #1781 from jsquyres/pr/disable-psm-psm2-signal-hijacking

PSM/PSM2: Disable signal handler hijacking by default
Этот коммит содержится в:
Jeff Squyres 2016-06-14 15:33:24 -04:00 коммит произвёл GitHub
родитель 2886d93fb8 5071602c59
Коммит c2185bb4b8
3 изменённых файлов: 46 добавлений и 3 удалений

Просмотреть файл

@ -12,7 +12,7 @@
* All rights reserved.
* Copyright (c) 2015 Los Alamos National Security, LLC. All rights
* reserved.
* Copyright (c) 2015 Cisco Systems, Inc. All rights reserved.
* Copyright (c) 2015-2016 Cisco Systems, Inc. All rights reserved.
* Copyright (c) 2015 Intel, Inc. All rights reserved.
* Copyright (c) 2015 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
@ -131,6 +131,10 @@ OBJ_CLASS_INSTANCE(ompi_java_buffer_t,
*/
jint JNI_OnLoad(JavaVM *vm, void *reserved)
{
// Ensure that PSM signal hijacking is disabled *before* loading
// the library (see comment in the function for more detail).
opal_init_psm();
libmpi = dlopen("libmpi." OPAL_DYN_LIB_SUFFIX, RTLD_NOW | RTLD_GLOBAL);
#if defined(HAVE_DL_INFO) && defined(HAVE_LIBGEN_H)

Просмотреть файл

@ -10,7 +10,7 @@
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* Copyright (c) 2008 Sun Microsystems, Inc. All rights reserved.
* Copyright (c) 2010-2012 Cisco Systems, Inc. All rights reserved.
* Copyright (c) 2010-2016 Cisco Systems, Inc. All rights reserved.
* Copyright (c) 2014 Intel, Inc. All rights reserved.
* $COPYRIGHT$
*
@ -76,6 +76,13 @@ OPAL_DECLSPEC int opal_finalize(void);
*/
OPAL_DECLSPEC int opal_init_util(int* pargc, char*** pargv);
/**
* Disable PSM/PSM2 signal hijacking.
*
* See comment in the function for more detail.
*/
OPAL_DECLSPEC int opal_init_psm(void);
/**
* Finalize the OPAL layer, excluding the MCA system.
*

Просмотреть файл

@ -10,7 +10,7 @@
* University of Stuttgart. All rights reserved.
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* Copyright (c) 2007-2012 Cisco Systems, Inc. All rights reserved.
* Copyright (c) 2007-2016 Cisco Systems, Inc. All rights reserved.
* Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved.
* Copyright (c) 2009 Oak Ridge National Labs. All rights reserved.
* Copyright (c) 2010-2015 Los Alamos National Security, LLC.
@ -265,6 +265,34 @@ opal_err2str(int errnum, const char **errmsg)
}
int opal_init_psm(void)
{
/* Very early in the init sequence -- before *ANY* MCA components
are opened -- we need to disable some behavior from the PSM and
PSM2 libraries (by default): at least some old versions of
these libraries hijack signal handlers during their library
constructors and then do not un-hijack them when the libraries
are unloaded.
It is a bit of an abstraction break that we have to put
vendor/transport-specific code in the OPAL core, but we're
out of options, unfortunately.
NOTE: We only disable this behavior if the corresponding
environment variables are not already set (i.e., if the
user/environment has indicated a preference for this behavior,
we won't override it). */
if (NULL == getenv("IPATH_NO_BACKTRACE")) {
opal_setenv("IPATH_NO_BACKTRACE", "1", true, &environ);
}
if (NULL == getenv("HFI_NO_BACKTRACE")) {
opal_setenv("HFI_NO_BACKTRACE", "1", true, &environ);
}
return OPAL_SUCCESS;
}
int
opal_init_util(int* pargc, char*** pargv)
{
@ -328,6 +356,10 @@ opal_init_util(int* pargc, char*** pargv)
goto return_error;
}
// Disable PSM signal hijacking (see comment in function for more
// details)
opal_init_psm();
/* Setup the parameter system */
if (OPAL_SUCCESS != (ret = mca_base_var_init())) {
error = "mca_base_var_init";