-int smpi_mpi_wait_any(int count, smpi_mpi_request_t *requests, int *index, smpi_mpi_status_t *status) {
- int cpt;
-
- *index = MPI_UNDEFINED;
- if (NULL == requests) {
- return MPI_ERR_INTERN;
- }
- /* First check if one of them is already done */
- for (cpt=0;cpt<count;cpt++) {
- if (requests[cpt]->completed && !requests[cpt]->consumed) { /* got ya */
- *index=cpt;
- goto found_request;
- }
- }
- /* If none found, block */
- /* FIXME: should use a SIMIX_cond_waitany, when implemented. For now, block on the first one */
- while (1) {
- for (cpt=0;cpt<count;cpt++) {
- if (!requests[cpt]->completed) { /* this one is not done, wait on it */
- while (!requests[cpt]->completed)
- SIMIX_cond_wait(requests[cpt]->cond, requests[cpt]->mutex);
-
- *index=cpt;
- goto found_request;
- }
- }
- if (cpt == count) /* they are all done. Damn user */
- return MPI_ERR_REQUEST;
- }
-
- found_request:
- requests[*index]->consumed = 1;
-
- if (NULL != status) {
- status->MPI_SOURCE = requests[*index]->src;
- status->MPI_TAG = requests[*index]->tag;
- status->MPI_ERROR = MPI_SUCCESS;
- }
- return MPI_SUCCESS;
+/**
+ * waitany
+ **/
+int smpi_mpi_waitany(int count, smpi_mpi_request_t * requests, int *index,
+ smpi_mpi_status_t * status)
+{
+ int cpt;
+
+ DEBUG0("entering smpi_wait_any() ...");
+ *index = MPI_UNDEFINED;
+ if (NULL == requests) {
+ return MPI_ERR_INTERN;
+ }
+ /* First check if one of them is already done */
+ for (cpt = 0; cpt < count; cpt++) {
+ DEBUG2(" exam req[%d] of msg from <%d>",cpt,requests[cpt]->src);
+ if (requests[cpt]->completed && !requests[cpt]->consumed) { /* got ya */
+ DEBUG2("smpi_wait_any() found match req[%d] of msg from <%d>",cpt,requests[cpt]->src);
+ *index = cpt;
+ goto found_request;
+ }
+ }
+ /* If none found, block */
+ /* FIXME: should use a SIMIX_cond_waitany, when implemented. For now, block on the first one */
+ while (1) {
+ for (cpt = 0; cpt < count; cpt++) {
+
+#ifdef DEBUG_STEPH
+ print_req( requests[cpt] );
+#endif
+ if (!requests[cpt]->completed) { /* this one is not done, wait on it */
+ DEBUG3("smpi_waitany() blocked waiting a msg <%d> -> <%d>, tag=%d",requests[cpt]->src,requests[cpt]->dst,requests[cpt]->tag);
+ while (!requests[cpt]->completed)
+ SIMIX_cond_wait(requests[cpt]->cond, requests[cpt]->mutex);
+
+ *index = cpt;
+ goto found_request;
+ }
+ }
+ if (cpt == count) /* they are all done. Damn user */
+ return MPI_ERR_REQUEST;
+ }
+
+found_request:
+#ifdef DEBUG_STEPH
+ print_req( requests[cpt] );
+#endif
+ requests[*index]->consumed = 1;
+#ifdef DEBUG_STEPH
+ print_req( requests[cpt] );
+#endif
+ DEBUG2("smpi_waitany() request %p unblocked ... mark *req[%d]->consumed",requests[*index],cpt);
+ if (NULL != status) {
+ status->MPI_SOURCE = requests[*index]->src;
+ status->MPI_TAG = requests[*index]->tag;
+ status->MPI_ERROR = MPI_SUCCESS;
+ }
+ return MPI_SUCCESS;