1.1 --- a/NEWS Thu Aug 16 02:53:17 2007 +0000
1.2 +++ b/NEWS Thu Aug 16 03:20:40 2007 +0000
1.3 @@ -26,6 +26,13 @@
1.4 bug fixes (and other actions) for each version of Open MPI since
1.5 version 1.0.
1.6
1.7 +1.2.3lanl1
1.8 +----------
1.9 +
1.10 +- Fixed an issue with umask not being propagated when using the TM launcher.
1.11 +- Fixed a ROMIO problem where non-blocking I/O errors were not properly
1.12 + reported to the user.
1.13 +
1.14 1.2.3
1.15 -----
1.16
2.1 --- a/VERSION Thu Aug 16 02:53:17 2007 +0000
2.2 +++ b/VERSION Thu Aug 16 03:20:40 2007 +0000
2.3 @@ -17,7 +17,7 @@
2.4 # only requirement is that it must be entirely printable ASCII
2.5 # characters and have no white space.
2.6
2.7 -greek=rc2
2.8 +greek=lanl1
2.9
2.10 # If want_svn=1, then the SVN r number will be included in the overall
2.11 # Open MPI version number in some form.
3.1 --- a/ompi/mca/io/romio/src/io_romio_component.c Thu Aug 16 02:53:17 2007 +0000
3.2 +++ b/ompi/mca/io/romio/src/io_romio_component.c Thu Aug 16 03:20:40 2007 +0000
3.3 @@ -279,10 +279,8 @@
3.4 romio_rq = ((mca_io_romio_request_t *) item)->romio_rq;
3.5 ret = ROMIO_PREFIX(MPIO_Test)(&romio_rq, &flag,
3.6 &(((ompi_request_t *) item)->req_status));
3.7 - if (ret < 0) {
3.8 - OPAL_THREAD_UNLOCK (&mca_io_romio_mutex);
3.9 - return ret;
3.10 - } else if (1 == flag) {
3.11 + if ((0 != ret) || (0 != flag)) {
3.12 + ioreq->super.req_status.MPI_ERROR = ret;
3.13 ++count;
3.14 /* we're done, so remove us from the pending list */
3.15 opal_list_remove_item(&mca_io_romio_pending_requests, item);
3.16 @@ -297,7 +295,7 @@
3.17 ret = ompi_request_free((ompi_request_t**) &ioreq);
3.18 if (OMPI_SUCCESS != ret) {
3.19 OPAL_THREAD_UNLOCK(&mca_io_romio_mutex);
3.20 - return ret;
3.21 + return count;
3.22 }
3.23 }
3.24 }
4.1 --- a/orte/mca/pls/tm/pls_tm_module.c Thu Aug 16 02:53:17 2007 +0000
4.2 +++ b/orte/mca/pls/tm/pls_tm_module.c Thu Aug 16 03:20:40 2007 +0000
4.3 @@ -35,6 +35,9 @@
4.4 #ifdef HAVE_SYS_TYPES_H
4.5 #include <sys/types.h>
4.6 #endif
4.7 +#ifdef HAVE_SYS_STAT_H
4.8 +#include <sys/stat.h>
4.9 +#endif
4.10 #ifdef HAVE_SYS_WAIT_H
4.11 #include <sys/wait.h>
4.12 #endif
4.13 @@ -140,6 +143,7 @@
4.14 struct timeval jobstart, jobstop;
4.15 int maxtime=0, mintime=99999999, maxiter = 0, miniter = 0, deltat;
4.16 float avgtime=0.0;
4.17 + mode_t current_umask;
4.18
4.19 /* check for timing request - get start time if so */
4.20 if (mca_pls_tm_component.timing) {
4.21 @@ -302,6 +306,13 @@
4.22 * won't work on remote nodes
4.23 */
4.24 orte_pls_base_purge_mca_params(&env);
4.25 +
4.26 + /* add our umask -- see big note in orted.c */
4.27 + current_umask = umask(0);
4.28 + umask(current_umask);
4.29 + asprintf(&var, "0%o", current_umask);
4.30 + opal_setenv("ORTE_DAEMON_UMASK_VALUE", var, true, &env);
4.31 + free(var);
4.32
4.33 /* If we have a prefix, then modify the PATH and
4.34 LD_LIBRARY_PATH environment variables. We only allow
5.1 --- a/orte/tools/orted/orted.c Thu Aug 16 02:53:17 2007 +0000
5.2 +++ b/orte/tools/orted/orted.c Thu Aug 16 03:20:40 2007 +0000
5.3 @@ -35,6 +35,17 @@
5.4 #include <fcntl.h>
5.5 #include <errno.h>
5.6 #include <signal.h>
5.7 +#include <stdlib.h>
5.8 +#ifdef HAVE_LIMITS_H
5.9 +#include <limits.h>
5.10 +#endif
5.11 +#ifdef HAVE_SYS_TYPES_H
5.12 +#include <sys/types.h>
5.13 +#endif
5.14 +#ifdef HAVE_SYS_STAT_H
5.15 +#include <sys/stat.h>
5.16 +#endif
5.17 +#include <errno.h>
5.18
5.19 #include "orte/orte_constants.h"
5.20
5.21 @@ -204,6 +215,28 @@
5.22 char *segment;
5.23 int i;
5.24 orte_buffer_t answer;
5.25 + char *umask_str;
5.26 +
5.27 + /* Allow the PLS starters to pass us a umask to use, if required.
5.28 + Most starters by default can do something sane with the umask,
5.29 + but some (like TM) do not pass on the umask but instead inherit
5.30 + it form the root level process starter. This has to happen
5.31 + before opal_init and everything else so that the couple of
5.32 + places that stash a umask end up with the correct value. Only
5.33 + do it here (and not in orte_daemon) mainly to make it clear
5.34 + that this should only happen when starting an orted for the
5.35 + first time. All startes I'm aware of that don't require an
5.36 + orted are smart enough to pass on a reasonable umask, so they
5.37 + wouldn't need this functionality anyway. */
5.38 + umask_str = getenv("ORTE_DAEMON_UMASK_VALUE");
5.39 + if (NULL != umask_str) {
5.40 + char *endptr;
5.41 + long mask = strtol(umask_str, &endptr, 8);
5.42 + if ((! (0 == mask && (EINVAL == errno || ERANGE == errno))) &&
5.43 + (*endptr == '\0')) {
5.44 + umask(mask);
5.45 + }
5.46 + }
5.47
5.48 /* initialize the globals */
5.49 memset(&orted_globals, 0, sizeof(orted_globals_t));