diff --git a/src/mca/io/base/io_base_component_list.c b/src/mca/io/base/io_base_component_list.c index 12a8d836a6..3db2a3a3a5 100644 --- a/src/mca/io/base/io_base_component_list.c +++ b/src/mca/io/base/io_base_component_list.c @@ -157,9 +157,9 @@ int mca_io_base_component_del(mca_io_base_components_t *comp) } -int mca_io_base_progress(void) +int mca_io_base_progress(int *num_pending) { - int ret, count = 0; + int ret; ompi_list_item_t *item; component_item_t *citem; @@ -173,25 +173,23 @@ int mca_io_base_progress(void) item = ompi_list_get_next(item)) { citem = (component_item_t *) item; - switch(citem->version) { + switch (citem->version) { case MCA_IO_BASE_V_1_0_0: - ret = citem->component.v1_0_0.io_progress(); + ret = citem->component.v1_0_0.io_progress(num_pending); + if (OMPI_SUCCESS != ret) { + OMPI_THREAD_UNLOCK(&mutex); + return ret; + } break; - default: - ret = -1; - break; - } - if (ret > 0) { - count += ret; - } else { - return ret; + default: + break; } } OMPI_THREAD_UNLOCK(&mutex); - return count; + return OMPI_SUCCESS; } diff --git a/src/mca/io/io.h b/src/mca/io/io.h index 1ab8437b43..9ad1d54463 100644 --- a/src/mca/io/io.h +++ b/src/mca/io/io.h @@ -44,7 +44,7 @@ union mca_io_base_modules_t; /** * External progress function; invoked from ompi_progress() */ -int mca_io_base_progress(void); +int mca_io_base_progress(int *num_requests); /** @@ -102,7 +102,7 @@ typedef int (*mca_io_base_component_file_delete_unselect_fn_t) (char *filename, struct ompi_info_t *info, struct mca_io_base_delete_t *private_data); -typedef int (*mca_io_base_component_progress_fn_t)(void); +typedef int (*mca_io_base_component_progress_fn_t)(int *num_pending); /* IO component version and interface functions. */ struct mca_io_base_component_1_0_0_t { diff --git a/src/runtime/ompi_progress.c b/src/runtime/ompi_progress.c index 741fe69f04..4b204aca6c 100644 --- a/src/runtime/ompi_progress.c +++ b/src/runtime/ompi_progress.c @@ -35,7 +35,7 @@ void ompi_progress_events(int flag) void ompi_progress(void) { /* progress any outstanding communications */ - int ret, events = 0; + int ret, temp, events = 0; #if OMPI_HAVE_THREADS == 0 if (ompi_progress_event_flag != 0) { ret = ompi_event_loop(ompi_progress_event_flag); @@ -52,11 +52,9 @@ void ompi_progress(void) /* Progress IO requests, if there are any */ if (ompi_progress_pending_io_reqs > 0) { - ret = mca_io_base_progress(); - if (ret > 0) { - events += ret; - ompi_progress_pending_io_reqs -= ret; - } + temp = ompi_progress_pending_io_reqs; + mca_io_base_progress(&ompi_progress_pending_io_reqs); + events += (temp - ompi_progress_pending_io_reqs); } #if 1