Hey Gilles This fix doesn’t look right to me.
> + /* we read something - better get more */ > + num_chars_read += rc; > + orted_uri = realloc((void*)orted_uri, buffer_length+chunk); > + memset(&orted_uri[buffer_length], 0, chunk); > + buffer_length += chunk; > } Just because you read “something”, it doesn’t mean that you have to realloc the buffer. You might have read only a small piece, not an entire “chunk”. What you need to do is to see if the buffer has been filled, and only read each time up to the remaining number of characters available in the buffer. If the buffer has been filled (or if you want to optimize, if the remaining space falls under some minimum limit), then you realloc another ORTE_URI_MSG_LNGTH block. > On Sep 21, 2016, at 10:25 PM, git...@open-mpi.org wrote: > > This is an automated email from the git hooks/post-receive script. It was > generated because a ref change was pushed to the repository containing > the project "open-mpi/ompi". > > The branch, master has been updated > via c7bf9a0ec9940d6fe0ff6da5212fc881de73cf21 (commit) > from e1d89a4dcf5feeaf978e6806b08d609ecfb9889a (commit) > > Those revisions listed above that are new to this repository have > not appeared on any other notification email; so we list those > revisions in full, below. > > - Log ----------------------------------------------------------------- > https://github.com/open-mpi/ompi/commit/c7bf9a0ec9940d6fe0ff6da5212fc881de73cf21 > > commit c7bf9a0ec9940d6fe0ff6da5212fc881de73cf21 > Author: Gilles Gouaillardet <gil...@rist.or.jp> > Date: Thu Sep 22 13:18:54 2016 +0900 > > ess/singleton: fix read on the pipe to spawn'ed orted > > and close the pipe on both ends when it is no more needed > > diff --git a/orte/mca/ess/singleton/ess_singleton_module.c > b/orte/mca/ess/singleton/ess_singleton_module.c > index 571d453..55c7985 100644 > --- a/orte/mca/ess/singleton/ess_singleton_module.c > +++ b/orte/mca/ess/singleton/ess_singleton_module.c > @@ -571,20 +571,20 @@ static int fork_hnp(void) > orted_uri = (char*)malloc(buffer_length); > memset(orted_uri, 0, buffer_length); > > - while (chunk == (rc = read(p[0], &orted_uri[num_chars_read], > chunk))) { > + while (0 != (rc = read(p[0], &orted_uri[num_chars_read], chunk))) { > if (rc < 0 && (EAGAIN == errno || EINTR == errno)) { > continue; > - } else { > - num_chars_read = 0; > + } else if (rc < 0) { > + num_chars_read = -1; > break; > } > - /* we read an entire buffer - better get more */ > - num_chars_read += chunk; > - orted_uri = realloc((void*)orted_uri, > buffer_length+ORTE_URI_MSG_LGTH); > - memset(&orted_uri[buffer_length], 0, ORTE_URI_MSG_LGTH); > - buffer_length += ORTE_URI_MSG_LGTH; > + /* we read something - better get more */ > + num_chars_read += rc; > + orted_uri = realloc((void*)orted_uri, buffer_length+chunk); > + memset(&orted_uri[buffer_length], 0, chunk); > + buffer_length += chunk; > } > - num_chars_read += rc; > + close(p[0]); > > if (num_chars_read <= 0) { > /* we didn't get anything back - this is bad */ > diff --git a/orte/orted/orted_main.c b/orte/orted/orted_main.c > index 3c7bc63..0e7c318 100644 > --- a/orte/orted/orted_main.c > +++ b/orte/orted/orted_main.c > @@ -628,6 +628,7 @@ int orte_daemon(int argc, char *argv[]) > > /* cleanup */ > free(tmp); > + close(orted_globals.uri_pipe); > > /* since a singleton spawned us, we need to harvest > * any MCA params from the local environment so > > > ----------------------------------------------------------------------- > > Summary of changes: > orte/mca/ess/singleton/ess_singleton_module.c | 18 +++++++++--------- > orte/orted/orted_main.c | 1 + > 2 files changed, 10 insertions(+), 9 deletions(-) > > > hooks/post-receive > -- > open-mpi/ompi > _______________________________________________ > ompi-commits mailing list > ompi-comm...@lists.open-mpi.org > https://rfd.newmexicoconsortium.org/mailman/listinfo/ompi-commits _______________________________________________ devel mailing list devel@lists.open-mpi.org https://rfd.newmexicoconsortium.org/mailman/listinfo/devel