1
1

Consistent return from all progress functions.

This fix ensures that all progress functions return the number of
completed events.

Signed-off-by: George Bosilca <bosilca@icl.utk.edu>
(cherry picked from commit 72501f8f9c)
This commit is contained in:
George Bosilca 2020-01-08 16:07:36 -05:00 committed by Joseph Schuchart
parent 7b1beb0f6c
commit 0425a7a7d8
5 changed files with 21 additions and 19 deletions

View File

@ -100,6 +100,7 @@ static int ompi_comm_request_progress (void)
{
ompi_comm_request_t *request, *next;
static int32_t progressing = 0;
int completed = 0;
/* don't allow re-entry */
if (opal_atomic_swap_32 (&progressing, 1)) {
@ -121,6 +122,7 @@ static int ompi_comm_request_progress (void)
if( REQUEST_COMPLETE(subreq) ) {
ompi_request_free (&subreq);
request_item->subreq_count--;
completed++;
} else {
item_complete = false;
break;
@ -156,7 +158,7 @@ static int ompi_comm_request_progress (void)
opal_mutex_unlock (&ompi_comm_request_mutex);
progressing = 0;
return 1;
return completed;
}
void ompi_comm_request_start (ompi_comm_request_t *request)

View File

@ -469,5 +469,5 @@ int ompi_mtl_psm2_progress( void ) {
opal_show_help("help-mtl-psm2.txt",
"error polling network", true,
psm2_error_get_string(err));
return 1;
return OMPI_ERROR;
}

View File

@ -202,14 +202,13 @@ int ompi_grequest_invoke_query(ompi_request_t *request,
int rc = OMPI_SUCCESS;
ompi_grequest_t *g = (ompi_grequest_t*) request;
/* MPI-2:8.2 does not say what to do with the return value from
the query function (i.e., the int return value from the C
function or the ierr argument from the Fortran function).
Making the command decision here to ignore it. If the handler
wants to pass an error back, it should set it in the MPI_ERROR
field in the status (which is always kept, regardless if the
top-level function was invoked with MPI_STATUS[ES]_IGNORE or
not). */
/* MPI-3 mandates that the return value from the query function
* (i.e., the int return value from the C function or the ierr
* argument from the Fortran function) must be returned to the
* user. Thus, if the return of the query function is not MPI_SUCCESS
* we will update the MPI_ERROR field. Otherwise, the MPI_ERROR
* field is untouched (or left to the discretion of the query function).
*/
if (NULL != g->greq_query.c_query) {
if (g->greq_funcs_are_c) {
rc = g->greq_query.c_query(g->greq_state, status);
@ -221,7 +220,9 @@ int ompi_grequest_invoke_query(ompi_request_t *request,
rc = OMPI_FINT_2_INT(ierr);
}
}
if( MPI_SUCCESS != rc ) {
status->MPI_ERROR = rc;
}
return rc;
}

View File

@ -44,13 +44,11 @@ static int grequestx_progress(void) {
MPI_Status status;
OPAL_THREAD_UNLOCK(&lock);
request->greq_poll.c_poll(request->greq_state, &status);
OPAL_THREAD_LOCK(&lock);
if (REQUEST_COMPLETE(&request->greq_base)) {
OPAL_THREAD_LOCK(&lock);
opal_list_remove_item(&requests, &request->greq_base.super.super);
OPAL_THREAD_UNLOCK(&lock);
completed++;
}
OPAL_THREAD_LOCK(&lock);
}
in_progress = false;
}

View File

@ -187,20 +187,21 @@ static int mca_spml_ucx_component_register(void)
int spml_ucx_ctx_progress(void)
{
int i;
int i, completed = 0;
for (i = 0; i < mca_spml_ucx.active_array.ctxs_count; i++) {
ucp_worker_progress(mca_spml_ucx.active_array.ctxs[i]->ucp_worker[0]);
completed += ucp_worker_progress(mca_spml_ucx.active_array.ctxs[i]->ucp_worker[0]);
}
return 1;
return completed;
}
int spml_ucx_default_progress(void)
{
unsigned int i=0;
int completed = 0;
for (i = 0; i < mca_spml_ucx.ucp_workers; i++) {
ucp_worker_progress(mca_spml_ucx_ctx_default.ucp_worker[i]);
completed += ucp_worker_progress(mca_spml_ucx_ctx_default.ucp_worker[i]);
}
return 1;
return completed;
}
int spml_ucx_progress_aux_ctx(void)