[mpich-commits] [mpich] MPICH primary repository branch, master, updated. v3.2a2-106-g8cbbcae

Service Account noreply at mpich.org
Mon Jan 12 11:20:28 CST 2015


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 "MPICH primary repository".

The branch, master has been updated
       via  8cbbcae44bde9917f36010a255f7aba5f84d3d82 (commit)
       via  9f2db5530493eaf94e499f734364d12ec7ed53ef (commit)
       via  648cd48ca7e8eb835cf0b4d53a0e881228525d3a (commit)
       via  f6cdb3c8b5f2254704c671287625807c2e19df67 (commit)
       via  0418d4956781518528cf3c948d6155f40c41d600 (commit)
       via  50d85e51122eefb3dd0d03a7448cfa021a44ad0a (commit)
       via  7a785c843eb43fb2dbba995598a0ac811bb56707 (commit)
       via  a96ac72edde12b9ddfbb2c20b92d51bda71e0840 (commit)
      from  47ac6f6b9fa738a06850982a321f9810ab23fff2 (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 -----------------------------------------------------------------
http://git.mpich.org/mpich.git/commitdiff/8cbbcae44bde9917f36010a255f7aba5f84d3d82

commit 8cbbcae44bde9917f36010a255f7aba5f84d3d82
Author: Wesley Bland <wbland at anl.gov>
Date:   Mon Dec 15 15:50:46 2014 -0600

    Change MPIDI_CH3I_Comm_AS_enabled to be MPID level
    
    This macro was used inside CH3 to determine if the communicator could be
    used for anysource communication. With the rewrite of the anysource
    fault tolerance logic, it is now necessary to use it at the MPI level.
    Because it is a macro and not a function, the macro is defined in
    mpiimple.h as (1) and then overwritten in the ch3 device. Future devices
    can also overwrite it if desired.
    
    Signed-off-by: Huiwei Lu <huiweilu at mcs.anl.gov>

diff --git a/src/include/mpiimpl.h b/src/include/mpiimpl.h
index 52a729e..52937f8 100644
--- a/src/include/mpiimpl.h
+++ b/src/include/mpiimpl.h
@@ -1283,6 +1283,9 @@ int MPIR_Comm_delete_internal(MPID_Comm * comm_ptr, int isDisconnect);
     do { MPIU_Object_add_ref((_comm)); } while (0)
 #define MPIR_Comm_release_ref( _comm, _inuse ) \
     do { MPIU_Object_release_ref( _comm, _inuse ); } while (0)
+#ifndef MPID_Comm_AS_enabled
+#define MPID_Comm_AS_enabled(comm) (1)
+#endif
 
 
 /* Release a reference to a communicator.  If there are no pending
diff --git a/src/mpi/pt2pt/recv.c b/src/mpi/pt2pt/recv.c
index 4f6f541..922bce9 100644
--- a/src/mpi/pt2pt/recv.c
+++ b/src/mpi/pt2pt/recv.c
@@ -166,7 +166,7 @@ int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag,
             if (unlikely(MPIR_CVAR_ENABLE_FT &&
                         !MPID_Request_is_complete(request_ptr) &&
                         request_ptr->dev.match.parts.rank == MPI_ANY_SOURCE &&
-                        !MPIDI_CH3I_Comm_AS_enabled(request_ptr->comm))) {
+                        !MPID_Comm_AS_enabled(request_ptr->comm))) {
                 /* --BEGIN ERROR HANDLING-- */
                 MPID_Cancel_recv(request_ptr);
                 MPIR_STATUS_SET_CANCEL_BIT(request_ptr->status, FALSE);
diff --git a/src/mpi/pt2pt/sendrecv.c b/src/mpi/pt2pt/sendrecv.c
index 5046cb8..d6d4729 100644
--- a/src/mpi/pt2pt/sendrecv.c
+++ b/src/mpi/pt2pt/sendrecv.c
@@ -193,7 +193,7 @@ int MPI_Sendrecv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
             if (unlikely(MPIR_CVAR_ENABLE_FT &&
                         !MPID_Request_is_complete(rreq) &&
                         rreq->dev.match.parts.rank == MPI_ANY_SOURCE &&
-                        !MPIDI_CH3I_Comm_AS_enabled(rreq->comm))) {
+                        !MPID_Comm_AS_enabled(rreq->comm))) {
                 /* --BEGIN ERROR HANDLING-- */
                 MPID_Cancel_recv(rreq);
                 MPIR_STATUS_SET_CANCEL_BIT(rreq->status, FALSE);
diff --git a/src/mpi/pt2pt/test.c b/src/mpi/pt2pt/test.c
index 427ebe8..f29e90f 100644
--- a/src/mpi/pt2pt/test.c
+++ b/src/mpi/pt2pt/test.c
@@ -69,7 +69,7 @@ int MPIR_Test_impl(MPI_Request *request, int *flag, MPI_Status *status)
     } else if (unlikely(
                 MPIR_CVAR_ENABLE_FT &&
                 MPI_ANY_SOURCE == request_ptr->dev.match.parts.rank &&
-                !MPIDI_CH3I_Comm_AS_enabled(request_ptr->comm))) {
+                !MPID_Comm_AS_enabled(request_ptr->comm))) {
         MPIU_ERR_SET(mpi_errno, MPIX_ERR_PROC_FAILED_PENDING, "**failure_pending");
         if (status != MPI_STATUS_IGNORE) status->MPI_ERROR = mpi_errno;
         goto fn_fail;
diff --git a/src/mpi/pt2pt/testall.c b/src/mpi/pt2pt/testall.c
index c187fa9..fb7fc93 100644
--- a/src/mpi/pt2pt/testall.c
+++ b/src/mpi/pt2pt/testall.c
@@ -180,7 +180,7 @@ int MPI_Testall(int count, MPI_Request array_of_requests[], int *flag,
                 }
             } else if (unlikely(MPIR_CVAR_ENABLE_FT &&
                         MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
-                        !MPIDI_CH3I_Comm_AS_enabled(request_ptrs[i]->comm)))
+                        !MPID_Comm_AS_enabled(request_ptrs[i]->comm)))
             {
                 mpi_errno = MPI_ERR_IN_STATUS;
                 MPIU_ERR_SET(rc, MPIX_ERR_PROC_FAILED_PENDING, "**failure_pending");
diff --git a/src/mpi/pt2pt/testany.c b/src/mpi/pt2pt/testany.c
index 35ad54e..a4957c0 100644
--- a/src/mpi/pt2pt/testany.c
+++ b/src/mpi/pt2pt/testany.c
@@ -188,7 +188,7 @@ int MPI_Testany(int count, MPI_Request array_of_requests[], int *indx,
                 }
             } else if (unlikely(MPIR_CVAR_ENABLE_FT &&
                         MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
-                        !MPIDI_CH3I_Comm_AS_enabled(request_ptrs[i]->comm)))
+                        !MPID_Comm_AS_enabled(request_ptrs[i]->comm)))
             {
                 last_disabled_anysource = i;
             }
diff --git a/src/mpi/pt2pt/testsome.c b/src/mpi/pt2pt/testsome.c
index 1f3d42e..76ae264 100644
--- a/src/mpi/pt2pt/testsome.c
+++ b/src/mpi/pt2pt/testsome.c
@@ -200,7 +200,7 @@ int MPI_Testsome(int incount, MPI_Request array_of_requests[], int *outcount,
                 }
             } else if (unlikely(MPIR_CVAR_ENABLE_FT &&
                         MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
-                        !MPIDI_CH3I_Comm_AS_enabled(request_ptrs[i]->comm)))
+                        !MPID_Comm_AS_enabled(request_ptrs[i]->comm)))
             {
                 mpi_errno = MPI_ERR_IN_STATUS;
                 MPIU_ERR_SET(rc, MPIX_ERR_PROC_FAILED_PENDING, "**failure_pending");
diff --git a/src/mpi/pt2pt/wait.c b/src/mpi/pt2pt/wait.c
index 985a0c9..f685d2e 100644
--- a/src/mpi/pt2pt/wait.c
+++ b/src/mpi/pt2pt/wait.c
@@ -52,7 +52,7 @@ int MPIR_Wait_impl(MPI_Request *request, MPI_Status *status)
          * don't get stuck in the progress engine. */
         if (unlikely(MPIR_CVAR_ENABLE_FT &&
                     MPI_ANY_SOURCE == request_ptr->dev.match.parts.rank &&
-                    !MPIDI_CH3I_Comm_AS_enabled(request_ptr->comm))) {
+                    !MPID_Comm_AS_enabled(request_ptr->comm))) {
             mpi_errno = MPIR_Test_impl(request, &active_flag, status);
             goto fn_exit;
         }
@@ -86,7 +86,7 @@ int MPIR_Wait_impl(MPI_Request *request, MPI_Status *status)
                         MPIR_CVAR_ENABLE_FT &&
                         MPI_ANY_SOURCE == request_ptr->dev.match.parts.rank &&
                         !MPID_Request_is_complete(request_ptr) &&
-                        !MPIDI_CH3I_Comm_AS_enabled(request_ptr->comm))) {
+                        !MPID_Comm_AS_enabled(request_ptr->comm))) {
                 MPID_Progress_end(&progress_state);
                 MPIU_ERR_SET(mpi_errno, MPIX_ERR_PROC_FAILED_PENDING, "**failure_pending");
                 if (status != MPI_STATUS_IGNORE) status->MPI_ERROR = mpi_errno;
diff --git a/src/mpi/pt2pt/waitall.c b/src/mpi/pt2pt/waitall.c
index 0969bf6..5da2dec 100644
--- a/src/mpi/pt2pt/waitall.c
+++ b/src/mpi/pt2pt/waitall.c
@@ -94,7 +94,7 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
             if (unlikely(MPIR_CVAR_ENABLE_FT &&
                         MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
                         !MPID_Request_is_complete(request_ptrs[i]) &&
-                        !MPIDI_CH3I_Comm_AS_enabled(request_ptrs[i]->comm))) {
+                        !MPID_Comm_AS_enabled(request_ptrs[i]->comm))) {
                 disabled_anysource = TRUE;
             }
 	}
@@ -136,7 +136,7 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
                     if (unlikely(MPIR_CVAR_ENABLE_FT &&
                                 MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
                                 !MPID_Request_is_complete(request_ptrs[i]) &&
-                                !MPIDI_CH3I_Comm_AS_enabled(request_ptrs[i]->comm))) {
+                                !MPID_Comm_AS_enabled(request_ptrs[i]->comm))) {
                         MPIU_ERR_SET(mpi_errno, MPI_ERR_IN_STATUS, "**instatus");
                     }
                     MPID_Progress_end(&progress_state);
@@ -190,7 +190,7 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
             } else if (unlikely(MPIR_CVAR_ENABLE_FT &&
                         MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
                         !MPID_Request_is_complete(request_ptrs[i]) &&
-                        !MPIDI_CH3I_Comm_AS_enabled(request_ptrs[i]->comm))) {
+                        !MPID_Comm_AS_enabled(request_ptrs[i]->comm))) {
                 /* Check for pending failures */
                 MPID_Progress_end(&progress_state);
                 MPIU_ERR_SET(rc, MPIX_ERR_PROC_FAILED_PENDING, "**failure_pending");
diff --git a/src/mpi/pt2pt/waitany.c b/src/mpi/pt2pt/waitany.c
index a5e926d..ae9b37d 100644
--- a/src/mpi/pt2pt/waitany.c
+++ b/src/mpi/pt2pt/waitany.c
@@ -187,7 +187,7 @@ int MPI_Waitany(int count, MPI_Request array_of_requests[], int *indx,
 		}
             } else if (unlikely(MPIR_CVAR_ENABLE_FT &&
                         MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
-                        !MPIDI_CH3I_Comm_AS_enabled(request_ptrs[i]->comm))) {
+                        !MPID_Comm_AS_enabled(request_ptrs[i]->comm))) {
                 last_disabled_anysource = i;
             }
 	}
diff --git a/src/mpi/pt2pt/waitsome.c b/src/mpi/pt2pt/waitsome.c
index 259b85f..5f4aeac 100644
--- a/src/mpi/pt2pt/waitsome.c
+++ b/src/mpi/pt2pt/waitsome.c
@@ -167,7 +167,7 @@ int MPI_Waitsome(int incount, MPI_Request array_of_requests[],
             if (unlikely(MPIR_CVAR_ENABLE_FT &&
                         MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
                         !MPID_Request_is_complete(request_ptrs[i]) &&
-                        !MPIDI_CH3I_Comm_AS_enabled(request_ptrs[i]->comm))) {
+                        !MPID_Comm_AS_enabled(request_ptrs[i]->comm))) {
                 disabled_anysource = TRUE;
             }
 	}
@@ -241,7 +241,7 @@ int MPI_Waitsome(int incount, MPI_Request array_of_requests[],
                     }
                 } else if (unlikely(MPIR_CVAR_ENABLE_FT &&
                             MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
-                            !MPIDI_CH3I_Comm_AS_enabled(request_ptrs[i]->comm)))
+                            !MPID_Comm_AS_enabled(request_ptrs[i]->comm)))
                 {
                     mpi_errno = MPI_ERR_IN_STATUS;
                     MPIU_ERR_SET(rc, MPIX_ERR_PROC_FAILED_PENDING, "**failure_pending");
diff --git a/src/mpid/ch3/include/mpidpre.h b/src/mpid/ch3/include/mpidpre.h
index 85f24d9..6a7e63b 100644
--- a/src/mpid/ch3/include/mpidpre.h
+++ b/src/mpid/ch3/include/mpidpre.h
@@ -166,7 +166,8 @@ typedef union {
 #define MPID_Dev_comm_create_hook(comm_) MPIDI_CH3I_Comm_create_hook(comm_)
 #define MPID_Dev_comm_destroy_hook(comm_) MPIDI_CH3I_Comm_destroy_hook(comm_)
 
-#define MPIDI_CH3I_Comm_AS_enabled(comm) ((comm)->dev.anysource_enabled)
+#undef MPID_Comm_AS_enabled
+#define MPID_Comm_AS_enabled(comm) ((comm)->dev.anysource_enabled)
 
 typedef struct MPIDI_CH3I_comm
 {

http://git.mpich.org/mpich.git/commitdiff/9f2db5530493eaf94e499f734364d12ec7ed53ef

commit 9f2db5530493eaf94e499f734364d12ec7ed53ef
Author: Wesley Bland <wbland at anl.gov>
Date:   Mon Dec 15 14:34:17 2014 -0600

    Handle anysource in blocking recv functions
    
    If a blocking recv function (MPI_Recv and MPI_Sendrecv) includes an
    MPI_ANY_SOURCE and there is a failure, handle it by cleaning up the
    request and returning MPIX_ERR_PROC_FAILED.
    
    Signed-off-by: Huiwei Lu <huiweilu at mcs.anl.gov>

diff --git a/src/mpi/pt2pt/recv.c b/src/mpi/pt2pt/recv.c
index 41eeff8..4f6f541 100644
--- a/src/mpi/pt2pt/recv.c
+++ b/src/mpi/pt2pt/recv.c
@@ -162,6 +162,19 @@ int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag,
 		goto fn_fail;
 		/* --END ERROR HANDLING-- */
 	    }
+
+            if (unlikely(MPIR_CVAR_ENABLE_FT &&
+                        !MPID_Request_is_complete(request_ptr) &&
+                        request_ptr->dev.match.parts.rank == MPI_ANY_SOURCE &&
+                        !MPIDI_CH3I_Comm_AS_enabled(request_ptr->comm))) {
+                /* --BEGIN ERROR HANDLING-- */
+                MPID_Cancel_recv(request_ptr);
+                MPIR_STATUS_SET_CANCEL_BIT(request_ptr->status, FALSE);
+                MPIU_ERR_SET(request_ptr->status.MPI_ERROR, MPIX_ERR_PROC_FAILED, "**proc_failed");
+                mpi_errno = request_ptr->status.MPI_ERROR;
+                goto fn_fail;
+                /* --END ERROR HANDLING-- */
+            }
 	}
 	MPID_Progress_end(&progress_state);
     }
diff --git a/src/mpi/pt2pt/sendrecv.c b/src/mpi/pt2pt/sendrecv.c
index bc9c374..5046cb8 100644
--- a/src/mpi/pt2pt/sendrecv.c
+++ b/src/mpi/pt2pt/sendrecv.c
@@ -189,6 +189,23 @@ int MPI_Sendrecv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
 		goto fn_fail;
 		/* --END ERROR HANDLING-- */
 	    }
+
+            if (unlikely(MPIR_CVAR_ENABLE_FT &&
+                        !MPID_Request_is_complete(rreq) &&
+                        rreq->dev.match.parts.rank == MPI_ANY_SOURCE &&
+                        !MPIDI_CH3I_Comm_AS_enabled(rreq->comm))) {
+                /* --BEGIN ERROR HANDLING-- */
+                MPID_Cancel_recv(rreq);
+                MPIR_STATUS_SET_CANCEL_BIT(rreq->status, FALSE);
+                MPIU_ERR_SET(rreq->status.MPI_ERROR, MPIX_ERR_PROC_FAILED, "**proc_failed");
+                mpi_errno = rreq->status.MPI_ERROR;
+                if (!MPID_Request_is_complete(sreq)) {
+                    MPID_Cancel_send(sreq);
+                    MPIR_STATUS_SET_CANCEL_BIT(sreq->status, FALSE);
+                }
+                goto fn_fail;
+                /* --END ERROR HANDLING-- */
+            }
 	}
 	MPID_Progress_end(&progress_state);
     }

http://git.mpich.org/mpich.git/commitdiff/648cd48ca7e8eb835cf0b4d53a0e881228525d3a

commit 648cd48ca7e8eb835cf0b4d53a0e881228525d3a
Author: Wesley Bland <wbland at anl.gov>
Date:   Mon Dec 15 14:21:03 2014 -0600

    Make anysource test more accurate
    
    Test for the specific error code so it doesn't accidentally catch
    MPI_ERR_OTHER.
    
    Signed-off-by: Huiwei Lu <huiweilu at mcs.anl.gov>

diff --git a/test/mpi/ft/anysource.c b/test/mpi/ft/anysource.c
index 650057a..25aee93 100644
--- a/test/mpi/ft/anysource.c
+++ b/test/mpi/ft/anysource.c
@@ -37,8 +37,9 @@ int main(int argc, char **argv)
     if (rank == 0) {
         char buf[10];
         err = MPI_Recv(buf, 10, MPI_CHAR, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
-        if (MPI_SUCCESS == err) {
-            fprintf(stderr, "Expected a failure for receive from ANY_SOURCE\n");
+        MPI_Error_class(err, &ec);
+        if (MPIX_ERR_PROC_FAILED != ec) {
+            fprintf(stderr, "Expected MPIX_ERR_PROC_FAILED for receive from ANY_SOURCE: %d\n", ec);
             MPI_Abort(MPI_COMM_WORLD, 1);
         }
 
@@ -58,7 +59,6 @@ int main(int argc, char **argv)
         MPI_Error_class(err, &ec);
         if (MPIX_ERR_PROC_FAILED_PENDING != ec) {
             fprintf(stderr, "Expected a MPIX_ERR_PROC_FAILED_PENDING (%d) for receive from ANY_SOURCE: %d\n", MPIX_ERR_PROC_FAILED_PENDING, ec);
-            fprintf(stderr, "BUF: %s\n", buf);
             MPI_Abort(MPI_COMM_WORLD, 1);
         }
 

http://git.mpich.org/mpich.git/commitdiff/f6cdb3c8b5f2254704c671287625807c2e19df67

commit f6cdb3c8b5f2254704c671287625807c2e19df67
Author: Wesley Bland <wbland at anl.gov>
Date:   Mon Dec 15 12:45:07 2014 -0600

    Allow MPIR_Request_complete to take a NULL request
    
    If the first argument is NULL, don't try to set it to MPI_REQUEST_NULL.
    For blocking functions that want to complete the MPID_Request object,
    this allows them to reuse the code.
    
    Signed-off-by: Huiwei Lu <huiweilu at mcs.anl.gov>

diff --git a/src/mpi/pt2pt/mpir_request.c b/src/mpi/pt2pt/mpir_request.c
index 0e20b80..5cf6b97 100644
--- a/src/mpi/pt2pt/mpir_request.c
+++ b/src/mpi/pt2pt/mpir_request.c
@@ -77,7 +77,7 @@ int MPIR_Request_complete(MPI_Request * request, MPID_Request * request_ptr,
 	    mpi_errno = request_ptr->status.MPI_ERROR;
 	    MPIR_SENDQ_FORGET(request_ptr);
 	    MPID_Request_release(request_ptr);
-	    *request = MPI_REQUEST_NULL;
+            if (NULL != request) *request = MPI_REQUEST_NULL;
 	    break;
 	}
 	case MPID_REQUEST_RECV:
@@ -85,7 +85,7 @@ int MPIR_Request_complete(MPI_Request * request, MPID_Request * request_ptr,
 	    MPIR_Request_extract_status(request_ptr, status);
 	    mpi_errno = request_ptr->status.MPI_ERROR;
 	    MPID_Request_release(request_ptr);
-	    *request = MPI_REQUEST_NULL;
+            if (NULL != request) *request = MPI_REQUEST_NULL;
 	    break;
 	}
 			
@@ -210,7 +210,7 @@ int MPIR_Request_complete(MPI_Request * request, MPID_Request * request_ptr,
             }
             
             MPID_Request_release(request_ptr);
-            *request = MPI_REQUEST_NULL;
+            if (NULL != request) *request = MPI_REQUEST_NULL;
 	    
 	    break;
 	}
@@ -220,7 +220,7 @@ int MPIR_Request_complete(MPI_Request * request, MPID_Request * request_ptr,
         {
             MPIR_Request_extract_status(request_ptr, status);
             MPID_Request_release(request_ptr);
-            *request = MPI_REQUEST_NULL;
+            if (NULL != request) *request = MPI_REQUEST_NULL;
             break;
         }
 	

http://git.mpich.org/mpich.git/commitdiff/0418d4956781518528cf3c948d6155f40c41d600

commit 0418d4956781518528cf3c948d6155f40c41d600
Author: Wesley Bland <wbland at anl.gov>
Date:   Mon Dec 8 09:00:41 2014 -0800

    Handle anysource in the wait* functions
    
    If a wait operation involves an anysource, we need to first check to
    make sure that they haven't been disabled. If they have been, convert
    the wait* function to a test* function to prevent deadlocking inside the
    progress engine.
    
    Signed-off-by: Huiwei Lu <huiweilu at mcs.anl.gov>

diff --git a/src/mpi/pt2pt/wait.c b/src/mpi/pt2pt/wait.c
index b668d0b..985a0c9 100644
--- a/src/mpi/pt2pt/wait.c
+++ b/src/mpi/pt2pt/wait.c
@@ -46,7 +46,17 @@ int MPIR_Wait_impl(MPI_Request *request, MPI_Status *status)
     if (!MPID_Request_is_complete(request_ptr))
     {
 	MPID_Progress_state progress_state;
-	    
+
+        /* If this is an anysource request including a communicator with
+         * anysource disabled, convert the call to an MPI_Test instead so we
+         * don't get stuck in the progress engine. */
+        if (unlikely(MPIR_CVAR_ENABLE_FT &&
+                    MPI_ANY_SOURCE == request_ptr->dev.match.parts.rank &&
+                    !MPIDI_CH3I_Comm_AS_enabled(request_ptr->comm))) {
+            mpi_errno = MPIR_Test_impl(request, &active_flag, status);
+            goto fn_exit;
+        }
+
 	MPID_Progress_start(&progress_state);
         while (!MPID_Request_is_complete(request_ptr))
 	{
diff --git a/src/mpi/pt2pt/waitall.c b/src/mpi/pt2pt/waitall.c
index 5e7fcf7..0969bf6 100644
--- a/src/mpi/pt2pt/waitall.c
+++ b/src/mpi/pt2pt/waitall.c
@@ -48,6 +48,7 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
     int rc;
     int n_greqs;
     int proc_failure = FALSE;
+    int disabled_anysource = FALSE;
     const int ignoring_statuses = (array_of_statuses == MPI_STATUSES_IGNORE);
     int optimize = ignoring_statuses; /* see NOTE-O1 */
     MPIU_CHKLMEM_DECL(1);
@@ -86,6 +87,16 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
 
             if (request_ptrs[i]->kind == MPID_UREQUEST)
                 ++n_greqs;
+
+            /* If one of the requests is an anysource on a communicator that's
+             * disabled such communication, convert this operation to a testall
+             * instead to prevent getting stuck in the progress engine. */
+            if (unlikely(MPIR_CVAR_ENABLE_FT &&
+                        MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
+                        !MPID_Request_is_complete(request_ptrs[i]) &&
+                        !MPIDI_CH3I_Comm_AS_enabled(request_ptrs[i]->comm))) {
+                disabled_anysource = TRUE;
+            }
 	}
 	else
 	{
@@ -102,6 +113,11 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
 	goto fn_exit;
     }
 
+    if (unlikely(disabled_anysource)) {
+        mpi_errno = MPI_Testall(count, array_of_requests, &disabled_anysource, array_of_statuses);
+        goto fn_exit;
+    }
+
     /* NOTE-O1: high-message-rate optimization.  For simple send and recv
      * operations and MPI_STATUSES_IGNORE we use a fastpath approach that strips
      * out as many unnecessary jumps and error handling as possible.
diff --git a/src/mpi/pt2pt/waitsome.c b/src/mpi/pt2pt/waitsome.c
index ff4ff85..259b85f 100644
--- a/src/mpi/pt2pt/waitsome.c
+++ b/src/mpi/pt2pt/waitsome.c
@@ -96,6 +96,7 @@ int MPI_Waitsome(int incount, MPI_Request array_of_requests[],
     int n_inactive;
     int active_flag;
     int rc;
+    int disabled_anysource = FALSE;
     int mpi_errno = MPI_SUCCESS;
     MPIU_CHKLMEM_DECL(1);
     MPID_MPI_STATE_DECL(MPID_STATE_MPI_WAITSOME);
@@ -159,6 +160,16 @@ int MPI_Waitsome(int incount, MPI_Request array_of_requests[],
 		MPID_END_ERROR_CHECKS;
 	    }
 #           endif	    
+
+            /* If one of the requests is an anysource on a communicator that's
+             * disabled such communication, convert this operation to a testall
+             * instead to prevent getting stuck in the progress engine. */
+            if (unlikely(MPIR_CVAR_ENABLE_FT &&
+                        MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
+                        !MPID_Request_is_complete(request_ptrs[i]) &&
+                        !MPIDI_CH3I_Comm_AS_enabled(request_ptrs[i]->comm))) {
+                disabled_anysource = TRUE;
+            }
 	}
 	else
 	{
@@ -172,7 +183,12 @@ int MPI_Waitsome(int incount, MPI_Request array_of_requests[],
 	*outcount = MPI_UNDEFINED;
 	goto fn_exit;
     }
-    
+
+    if (unlikely(disabled_anysource)) {
+        mpi_errno = MPI_Testsome(incount, array_of_requests, outcount, array_of_indices, array_of_statuses);
+        goto fn_exit;
+    }
+
     /* Bill Gropp says MPI_Waitsome() is expected to try to make
        progress even if some requests have already completed;  
        therefore, we kick the pipes once and then fall into a loop

http://git.mpich.org/mpich.git/commitdiff/50d85e51122eefb3dd0d03a7448cfa021a44ad0a

commit 50d85e51122eefb3dd0d03a7448cfa021a44ad0a
Author: Wesley Bland <wbland at anl.gov>
Date:   Fri Dec 5 11:21:33 2014 -0600

    Break out of progress for anysource failures
    
    If a failure is detected, even if no request is actually complete, the
    completion counter will be incremented now as a way to give control back
    to the MPI layer to let it decide whether or not to continue.
    
    This gives the request completion functions a chance to see if they're
    waiting on an MPI_ANY_SOURCE request and if so, to return an error
    indicating that the completion function has a
    MPIX_ERR_PROC_FAILED_PENDING failure that the user needs to acknowledge.
    
    All of these functions should go into the progress engine at least once
    as a way to ensure that even if they will be returning an error, they'll
    at least give MPI a way to make progress and potentially still complete
    the request objects even if the user never acknowledges the failure.
    
    A follow on commit will add the functionality to keep the progress
    engine from getting stuck if a failure is discovered before entering the
    completion function.
    
    Signed-off-by: Huiwei Lu <huiweilu at mcs.anl.gov>

diff --git a/src/mpi/pt2pt/test.c b/src/mpi/pt2pt/test.c
index 5b5d325..427ebe8 100644
--- a/src/mpi/pt2pt/test.c
+++ b/src/mpi/pt2pt/test.c
@@ -66,8 +66,14 @@ int MPIR_Test_impl(MPI_Request *request, int *flag, MPI_Status *status)
 	*flag = TRUE;
 	if (mpi_errno) MPIU_ERR_POP(mpi_errno);
 	/* Fall through to the exit */
+    } else if (unlikely(
+                MPIR_CVAR_ENABLE_FT &&
+                MPI_ANY_SOURCE == request_ptr->dev.match.parts.rank &&
+                !MPIDI_CH3I_Comm_AS_enabled(request_ptr->comm))) {
+        MPIU_ERR_SET(mpi_errno, MPIX_ERR_PROC_FAILED_PENDING, "**failure_pending");
+        if (status != MPI_STATUS_IGNORE) status->MPI_ERROR = mpi_errno;
+        goto fn_fail;
     }
-        
  fn_exit:
     return mpi_errno;
  fn_fail:
diff --git a/src/mpi/pt2pt/testall.c b/src/mpi/pt2pt/testall.c
index 752276b..c187fa9 100644
--- a/src/mpi/pt2pt/testall.c
+++ b/src/mpi/pt2pt/testall.c
@@ -87,7 +87,7 @@ int MPI_Testall(int count, MPI_Request array_of_requests[], int *flag,
     int n_completed;
     int active_flag;
     int rc;
-    int proc_failure = 0;
+    int proc_failure = FALSE;
     int mpi_errno = MPI_SUCCESS;
     MPIU_CHKLMEM_DECL(1);
     MPID_MPI_STATE_DECL(MPID_STATE_MPI_TESTALL);
@@ -166,18 +166,29 @@ int MPI_Testall(int count, MPI_Request array_of_requests[], int *flag,
                                                              &(array_of_statuses[i]));
 	    if (mpi_errno != MPI_SUCCESS) goto fn_fail;
 	}
-	if (request_ptrs[i] != NULL && (MPID_Request_is_complete(request_ptrs[i]))
-	{
-	    n_completed++;
-            rc = MPIR_Request_get_error(request_ptrs[i]);
-            if (rc != MPI_SUCCESS)
+        if (request_ptrs[i] != NULL)
+        {
+            if (MPID_Request_is_complete(request_ptrs[i]))
+            {
+                n_completed++;
+                rc = MPIR_Request_get_error(request_ptrs[i]);
+                if (rc != MPI_SUCCESS)
+                {
+                    if (MPIX_ERR_PROC_FAILED == MPIR_ERR_GET_CLASS(rc) || MPIX_ERR_PROC_FAILED_PENDING == MPIR_ERR_GET_CLASS(rc))
+                        proc_failure = TRUE;
+                    mpi_errno = MPI_ERR_IN_STATUS;
+                }
+            } else if (unlikely(MPIR_CVAR_ENABLE_FT &&
+                        MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
+                        !MPIDI_CH3I_Comm_AS_enabled(request_ptrs[i]->comm)))
             {
-                if (MPIX_ERR_PROC_FAILED == MPIR_ERR_GET_CLASS(rc) ||
-                    MPIX_ERR_PROC_FAILED_PENDING == MPIR_ERR_GET_CLASS(rc))
-                    proc_failure = 1;
                 mpi_errno = MPI_ERR_IN_STATUS;
+                MPIU_ERR_SET(rc, MPIX_ERR_PROC_FAILED_PENDING, "**failure_pending");
+                status_ptr = (array_of_statuses != MPI_STATUSES_IGNORE) ? &array_of_statuses[i] : MPI_STATUS_IGNORE;
+                if (status_ptr != MPI_STATUS_IGNORE) status_ptr->MPI_ERROR = rc;
+                proc_failure = TRUE;
             }
-	}
+        }
     }
     
     if (n_completed == count || mpi_errno == MPI_ERR_IN_STATUS)
diff --git a/src/mpi/pt2pt/testany.c b/src/mpi/pt2pt/testany.c
index 8002cd6..35ad54e 100644
--- a/src/mpi/pt2pt/testany.c
+++ b/src/mpi/pt2pt/testany.c
@@ -73,6 +73,7 @@ int MPI_Testany(int count, MPI_Request array_of_requests[], int *indx,
     int i;
     int n_inactive;
     int active_flag;
+    int last_disabled_anysource = -1;
     int mpi_errno = MPI_SUCCESS;
     MPIU_CHKLMEM_DECL(1);
     MPID_MPI_STATE_DECL(MPID_STATE_MPI_TESTANY);
@@ -168,23 +169,41 @@ int MPI_Testany(int count, MPI_Request array_of_requests[], int *indx,
                                                              status);
 	    if (mpi_errno != MPI_SUCCESS) goto fn_fail;
 	}
-        if (request_ptrs[i] != NULL && MPID_Request_is_complete(request_ptrs[i]))
-	{
-	    mpi_errno = MPIR_Request_complete(&array_of_requests[i], 
-					      request_ptrs[i], 
-					      status, &active_flag);
-	    if (active_flag)
-	    {
-		*flag = TRUE;
-		*indx = i;
-		goto fn_exit;
-	    }
-	    else
-	    {
-		n_inactive += 1;
-	    }
+        if (request_ptrs[i] != NULL)
+        {
+            if (MPID_Request_is_complete(request_ptrs[i]))
+            {
+                mpi_errno = MPIR_Request_complete(&array_of_requests[i],
+                        request_ptrs[i],
+                        status, &active_flag);
+                if (active_flag)
+                {
+                    *flag = TRUE;
+                    *indx = i;
+                    goto fn_exit;
+                }
+                else
+                {
+                    n_inactive += 1;
+                }
+            } else if (unlikely(MPIR_CVAR_ENABLE_FT &&
+                        MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
+                        !MPIDI_CH3I_Comm_AS_enabled(request_ptrs[i]->comm)))
+            {
+                last_disabled_anysource = i;
+            }
         }
     }
+
+    /* If none of the requests completed, mark the last anysource request as
+     * pending failure. */
+    if (unlikely(last_disabled_anysource != -1))
+    {
+        MPIU_ERR_SET(mpi_errno, MPIX_ERR_PROC_FAILED_PENDING, "**failure_pending");
+        if (status != MPI_STATUS_IGNORE) status->MPI_ERROR = mpi_errno;
+        *flag = TRUE;
+        goto fn_fail;
+    }
     
     if (n_inactive == count)
     {
diff --git a/src/mpi/pt2pt/testsome.c b/src/mpi/pt2pt/testsome.c
index 1dc99f8..1f3d42e 100644
--- a/src/mpi/pt2pt/testsome.c
+++ b/src/mpi/pt2pt/testsome.c
@@ -170,32 +170,43 @@ int MPI_Testsome(int incount, MPI_Request array_of_requests[], int *outcount,
 	    if (mpi_errno != MPI_SUCCESS) goto fn_fail;
 	}
         status_ptr = (array_of_statuses != MPI_STATUSES_IGNORE) ? &array_of_statuses[n_active] : MPI_STATUS_IGNORE;
-        if (request_ptrs[i] != NULL && MPID_Request_is_complete(request_ptrs[i])) {
-	    rc = MPIR_Request_complete(&array_of_requests[i], request_ptrs[i],
-				       status_ptr, &active_flag);
-	    if (active_flag)
-	    {
-		array_of_indices[n_active] = i;
-		n_active += 1;
-		    
-		if (rc == MPI_SUCCESS)
-		{ 
-		    request_ptrs[i] = NULL;
-		}
-		else
-		{
-		    mpi_errno = MPI_ERR_IN_STATUS;
-		    if (status_ptr != MPI_STATUS_IGNORE)
-		    {
-			status_ptr->MPI_ERROR = rc;
-		    }
-		}
-	    }
-	    else
-	    {
-		request_ptrs[i] = NULL;
-		n_inactive += 1;
-	    }
+        if (request_ptrs[i] != NULL)
+        {
+            if (MPID_Request_is_complete(request_ptrs[i]))
+            {
+                rc = MPIR_Request_complete(&array_of_requests[i], request_ptrs[i], status_ptr, &active_flag);
+                if (active_flag)
+                {
+                    array_of_indices[n_active] = i;
+                    n_active += 1;
+
+                    if (rc == MPI_SUCCESS)
+                    {
+                        request_ptrs[i] = NULL;
+                    }
+                    else
+                    {
+                        mpi_errno = MPI_ERR_IN_STATUS;
+                        if (status_ptr != MPI_STATUS_IGNORE)
+                        {
+                            status_ptr->MPI_ERROR = rc;
+                        }
+                    }
+                }
+                else
+                {
+                    request_ptrs[i] = NULL;
+                    n_inactive += 1;
+                }
+            } else if (unlikely(MPIR_CVAR_ENABLE_FT &&
+                        MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
+                        !MPIDI_CH3I_Comm_AS_enabled(request_ptrs[i]->comm)))
+            {
+                mpi_errno = MPI_ERR_IN_STATUS;
+                MPIU_ERR_SET(rc, MPIX_ERR_PROC_FAILED_PENDING, "**failure_pending");
+                status_ptr = (array_of_statuses != MPI_STATUSES_IGNORE) ? &array_of_statuses[i] : MPI_STATUS_IGNORE;
+                if (status_ptr != MPI_STATUS_IGNORE) status_ptr->MPI_ERROR = rc;
+            }
         }
     }
 
diff --git a/src/mpi/pt2pt/wait.c b/src/mpi/pt2pt/wait.c
index 2d609ac..b668d0b 100644
--- a/src/mpi/pt2pt/wait.c
+++ b/src/mpi/pt2pt/wait.c
@@ -71,6 +71,17 @@ int MPIR_Wait_impl(MPI_Request *request, MPI_Status *status)
                 MPIU_ERR_POP(mpi_errno);
 		/* --END ERROR HANDLING-- */
 	    }
+
+            if (unlikely(
+                        MPIR_CVAR_ENABLE_FT &&
+                        MPI_ANY_SOURCE == request_ptr->dev.match.parts.rank &&
+                        !MPID_Request_is_complete(request_ptr) &&
+                        !MPIDI_CH3I_Comm_AS_enabled(request_ptr->comm))) {
+                MPID_Progress_end(&progress_state);
+                MPIU_ERR_SET(mpi_errno, MPIX_ERR_PROC_FAILED_PENDING, "**failure_pending");
+                if (status != MPI_STATUS_IGNORE) status->MPI_ERROR = mpi_errno;
+                goto fn_fail;
+            }
 	}
 	MPID_Progress_end(&progress_state);
     }
diff --git a/src/mpi/pt2pt/waitall.c b/src/mpi/pt2pt/waitall.c
index 9613093..5e7fcf7 100644
--- a/src/mpi/pt2pt/waitall.c
+++ b/src/mpi/pt2pt/waitall.c
@@ -47,7 +47,7 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
     int active_flag;
     int rc;
     int n_greqs;
-    int proc_failure = 0;
+    int proc_failure = FALSE;
     const int ignoring_statuses = (array_of_statuses == MPI_STATUSES_IGNORE);
     int optimize = ignoring_statuses; /* see NOTE-O1 */
     MPIU_CHKLMEM_DECL(1);
@@ -117,6 +117,12 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
                  * OK for the error case to be slower */
                 if (unlikely(mpi_errno)) {
                     /* --BEGIN ERROR HANDLING-- */
+                    if (unlikely(MPIR_CVAR_ENABLE_FT &&
+                                MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
+                                !MPID_Request_is_complete(request_ptrs[i]) &&
+                                !MPIDI_CH3I_Comm_AS_enabled(request_ptrs[i]->comm))) {
+                        MPIU_ERR_SET(mpi_errno, MPI_ERR_IN_STATUS, "**instatus");
+                    }
                     MPID_Progress_end(&progress_state);
                     MPIU_ERR_POP(mpi_errno);
                     /* --END ERROR HANDLING-- */
@@ -165,6 +171,17 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
                 MPID_Progress_end(&progress_state);
                 MPIU_ERR_POP(mpi_errno);
                 /* --END ERROR HANDLING-- */
+            } else if (unlikely(MPIR_CVAR_ENABLE_FT &&
+                        MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
+                        !MPID_Request_is_complete(request_ptrs[i]) &&
+                        !MPIDI_CH3I_Comm_AS_enabled(request_ptrs[i]->comm))) {
+                /* Check for pending failures */
+                MPID_Progress_end(&progress_state);
+                MPIU_ERR_SET(rc, MPIX_ERR_PROC_FAILED_PENDING, "**failure_pending");
+                status_ptr = (ignoring_statuses) ? MPI_STATUS_IGNORE : &array_of_statuses[i];
+                if (status_ptr != MPI_STATUS_IGNORE) status_ptr->MPI_ERROR = mpi_errno;
+                proc_failure = TRUE;
+                break;
             }
         }
 
@@ -174,7 +191,6 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
             rc = MPIR_Request_complete(&array_of_requests[i], request_ptrs[i], status_ptr, &active_flag);
         }
 
-        }
         if (rc == MPI_SUCCESS)
         {
             request_ptrs[i] = NULL;
@@ -184,11 +200,11 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
         else
         {
             /* req completed with an error */
-            mpi_errno = MPI_ERR_IN_STATUS;
+            MPIU_ERR_SET(mpi_errno, MPI_ERR_IN_STATUS, "**instatus");
 
             if (!proc_failure) {
                 if (MPIX_ERR_PROC_FAILED == MPIR_ERR_GET_CLASS(rc))
-                    proc_failure = 1;
+                    proc_failure = TRUE;
             }
 
             if (!ignoring_statuses)
diff --git a/src/mpi/pt2pt/waitany.c b/src/mpi/pt2pt/waitany.c
index ff894b9..a5e926d 100644
--- a/src/mpi/pt2pt/waitany.c
+++ b/src/mpi/pt2pt/waitany.c
@@ -77,6 +77,7 @@ int MPI_Waitany(int count, MPI_Request array_of_requests[], int *indx,
     int active_flag;
     int init_req_array;
     int found_nonnull_req;
+    int last_disabled_anysource = -1;
     int mpi_errno = MPI_SUCCESS;
     MPIU_CHKLMEM_DECL(1);
     MPID_MPI_STATE_DECL(MPID_STATE_MPI_WAITANY);
@@ -184,7 +185,11 @@ int MPI_Waitany(int count, MPI_Request array_of_requests[], int *indx,
 			goto break_l1;
 		    }
 		}
-	    }
+            } else if (unlikely(MPIR_CVAR_ENABLE_FT &&
+                        MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
+                        !MPIDI_CH3I_Comm_AS_enabled(request_ptrs[i]->comm))) {
+                last_disabled_anysource = i;
+            }
 	}
         init_req_array = FALSE;
 
@@ -197,6 +202,15 @@ int MPI_Waitany(int count, MPI_Request array_of_requests[], int *indx,
             goto break_l1;
         }
 
+        /* If none of the requests completed, mark the last anysource request
+         * as pending failure and break out. */
+        if (unlikely(last_disabled_anysource != -1))
+        {
+            MPIU_ERR_SET(mpi_errno, MPIX_ERR_PROC_FAILED_PENDING, "**failure_pending");
+            if (status != MPI_STATUS_IGNORE) status->MPI_ERROR = mpi_errno;
+            goto fn_progress_end_fail;
+        }
+
 	mpi_errno = MPID_Progress_wait(&progress_state);
 	if (mpi_errno != MPI_SUCCESS) goto fn_progress_end_fail;
     }
diff --git a/src/mpi/pt2pt/waitsome.c b/src/mpi/pt2pt/waitsome.c
index 3268b94..ff4ff85 100644
--- a/src/mpi/pt2pt/waitsome.c
+++ b/src/mpi/pt2pt/waitsome.c
@@ -194,33 +194,44 @@ int MPI_Waitsome(int incount, MPI_Request array_of_requests[],
 	if (mpi_errno != MPI_SUCCESS) goto fn_fail;
 	for (i = 0; i < incount; i++)
 	{
-            if (request_ptrs[i] != NULL && MPID_Request_is_complete(request_ptrs[i]))
+            if (request_ptrs[i] != NULL)
 	    {
-		status_ptr = (array_of_statuses != MPI_STATUSES_IGNORE) ? &array_of_statuses[n_active] : MPI_STATUS_IGNORE;
-		rc = MPIR_Request_complete(&array_of_requests[i], request_ptrs[i], status_ptr, &active_flag);
-		if (active_flag)
-		{
-		    array_of_indices[n_active] = i;
-		    n_active += 1;
-		    
-		    if (rc == MPI_SUCCESS)
-		    { 
-			request_ptrs[i] = NULL;
-		    }
-		    else
-		    {
-			mpi_errno = MPI_ERR_IN_STATUS;
-			if (status_ptr != MPI_STATUS_IGNORE)
-			{
-			    status_ptr->MPI_ERROR = rc;
-			}
-		    }
-		}
-		else
-		{
-		    request_ptrs[i] = NULL;
-		    n_inactive += 1;
-		}
+                if (MPID_Request_is_complete(request_ptrs[i]))
+                {
+                    status_ptr = (array_of_statuses != MPI_STATUSES_IGNORE) ? &array_of_statuses[n_active] : MPI_STATUS_IGNORE;
+                    rc = MPIR_Request_complete(&array_of_requests[i], request_ptrs[i], status_ptr, &active_flag);
+                    if (active_flag)
+                    {
+                        array_of_indices[n_active] = i;
+                        n_active += 1;
+
+                        if (rc == MPI_SUCCESS)
+                        {
+                            request_ptrs[i] = NULL;
+                        }
+                        else
+                        {
+                            mpi_errno = MPI_ERR_IN_STATUS;
+                            if (status_ptr != MPI_STATUS_IGNORE)
+                            {
+                                status_ptr->MPI_ERROR = rc;
+                            }
+                        }
+                    }
+                    else
+                    {
+                        request_ptrs[i] = NULL;
+                        n_inactive += 1;
+                    }
+                } else if (unlikely(MPIR_CVAR_ENABLE_FT &&
+                            MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
+                            !MPIDI_CH3I_Comm_AS_enabled(request_ptrs[i]->comm)))
+                {
+                    mpi_errno = MPI_ERR_IN_STATUS;
+                    MPIU_ERR_SET(rc, MPIX_ERR_PROC_FAILED_PENDING, "**failure_pending");
+                    status_ptr = (array_of_statuses != MPI_STATUSES_IGNORE) ? &array_of_statuses[n_active] : MPI_STATUS_IGNORE;
+                    if (status_ptr != MPI_STATUS_IGNORE) status_ptr->MPI_ERROR = rc;
+                }
             }
 	}
 
diff --git a/src/mpid/ch3/src/ch3u_comm.c b/src/mpid/ch3/src/ch3u_comm.c
index f9642fb..8d2c524 100644
--- a/src/mpid/ch3/src/ch3u_comm.c
+++ b/src/mpid/ch3/src/ch3u_comm.c
@@ -384,6 +384,10 @@ int MPIDI_CH3I_Comm_handle_failed_procs(MPID_Group *new_failed_procs)
         }
     }
 
+    /* Signal that something completed here to allow the progress engine to
+     * break out and return control to the user. */
+    MPIDI_CH3_Progress_signal_completion();
+
  fn_exit:
     MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_COMM_HANDLE_FAILED_PROCS);
     return mpi_errno;

http://git.mpich.org/mpich.git/commitdiff/7a785c843eb43fb2dbba995598a0ac811bb56707

commit 7a785c843eb43fb2dbba995598a0ac811bb56707
Author: Wesley Bland <wbland at anl.gov>
Date:   Wed Dec 3 13:36:25 2014 -0600

    Strip out pending ANY_SOURCE request handling
    
    The existing way that we handle non-blocking requests involving wildcard
    receive operations is incorrect. We're cancelling request operations and
    trying to recreate them later. In the meantime, it's messing with
    matching and makes it possible (likely?) that some messages that arrive
    will never be matched. A new way of handling this is coming next.
    
    Signed-off-by: Huiwei Lu <huiweilu at mcs.anl.gov>

diff --git a/src/include/mpiimpl.h b/src/include/mpiimpl.h
index 09f5b52..52a729e 100644
--- a/src/include/mpiimpl.h
+++ b/src/include/mpiimpl.h
@@ -3631,23 +3631,6 @@ void MPID_Request_set_completed(MPID_Request *);
 @*/
 void MPID_Request_release(MPID_Request *);
 
-/*@
-  MPID_Request_is_pending_failure - Check if a request is pending because of a process failures
-
-  Input Parameter:
-  request - request to check
-
-  Return value:
-  0 - The request is not pending because of a failure
-  Non-zero - The request is pending because of a failure
-
-  Notes:
-  This routine checks to see if the communicator used in the request can
-  participate in MPI_ANY_SOURCE operations and if this request is already
-  pending due to a process failure.
-@*/
-int MPID_Request_is_pending_failure(MPID_Request *);
-
 typedef struct MPID_Grequest_class {
      MPIU_OBJECT_HEADER; /* adds handle and ref_count fields */
      MPI_Grequest_query_function *query_fn;
diff --git a/src/mpi/pt2pt/test.c b/src/mpi/pt2pt/test.c
index acf2f2d..5b5d325 100644
--- a/src/mpi/pt2pt/test.c
+++ b/src/mpi/pt2pt/test.c
@@ -60,11 +60,7 @@ int MPIR_Test_impl(MPI_Request *request, int *flag, MPI_Status *status)
         if (mpi_errno) MPIU_ERR_POP(mpi_errno);
     }
 
-    if (MPID_Request_is_pending_failure(request_ptr)) {
-        *flag = TRUE;
-        mpi_errno = request_ptr->status.MPI_ERROR;
-        goto fn_fail;
-    } else if (MPID_Request_is_complete(request_ptr)) {
+    if (MPID_Request_is_complete(request_ptr)) {
 	mpi_errno = MPIR_Request_complete(request, request_ptr, status,
 					  &active_flag);
 	*flag = TRUE;
diff --git a/src/mpi/pt2pt/testall.c b/src/mpi/pt2pt/testall.c
index 8acc813..752276b 100644
--- a/src/mpi/pt2pt/testall.c
+++ b/src/mpi/pt2pt/testall.c
@@ -166,7 +166,7 @@ int MPI_Testall(int count, MPI_Request array_of_requests[], int *flag,
                                                              &(array_of_statuses[i]));
 	    if (mpi_errno != MPI_SUCCESS) goto fn_fail;
 	}
-	if (request_ptrs[i] != NULL && (MPID_Request_is_complete(request_ptrs[i]) || MPID_Request_is_pending_failure(request_ptrs[i])))
+	if (request_ptrs[i] != NULL && (MPID_Request_is_complete(request_ptrs[i]))
 	{
 	    n_completed++;
             rc = MPIR_Request_get_error(request_ptrs[i]);
diff --git a/src/mpi/pt2pt/testany.c b/src/mpi/pt2pt/testany.c
index fa7cb58..8002cd6 100644
--- a/src/mpi/pt2pt/testany.c
+++ b/src/mpi/pt2pt/testany.c
@@ -168,12 +168,7 @@ int MPI_Testany(int count, MPI_Request array_of_requests[], int *indx,
                                                              status);
 	    if (mpi_errno != MPI_SUCCESS) goto fn_fail;
 	}
-        if (request_ptrs[i] != NULL && MPID_Request_is_pending_failure(request_ptrs[i])) {
-            mpi_errno = request_ptrs[i]->status.MPI_ERROR;
-            *flag = TRUE;
-            *indx = i;
-            goto fn_fail;
-        } else if (request_ptrs[i] != NULL && MPID_Request_is_complete(request_ptrs[i]))
+        if (request_ptrs[i] != NULL && MPID_Request_is_complete(request_ptrs[i]))
 	{
 	    mpi_errno = MPIR_Request_complete(&array_of_requests[i], 
 					      request_ptrs[i], 
diff --git a/src/mpi/pt2pt/testsome.c b/src/mpi/pt2pt/testsome.c
index 0240b76..1dc99f8 100644
--- a/src/mpi/pt2pt/testsome.c
+++ b/src/mpi/pt2pt/testsome.c
@@ -170,15 +170,7 @@ int MPI_Testsome(int incount, MPI_Request array_of_requests[], int *outcount,
 	    if (mpi_errno != MPI_SUCCESS) goto fn_fail;
 	}
         status_ptr = (array_of_statuses != MPI_STATUSES_IGNORE) ? &array_of_statuses[n_active] : MPI_STATUS_IGNORE;
-        if (request_ptrs[i] != NULL && MPID_Request_is_pending_failure(request_ptrs[i])) {
-            mpi_errno = MPI_ERR_IN_STATUS;
-            array_of_indices[n_active] = i;
-            n_active += 1;
-            rc = request_ptrs[i]->status.MPI_ERROR;
-            if (status_ptr != MPI_STATUS_IGNORE) {
-                status_ptr->MPI_ERROR = rc;
-            }
-        } else if (request_ptrs[i] != NULL && MPID_Request_is_complete(request_ptrs[i])) {
+        if (request_ptrs[i] != NULL && MPID_Request_is_complete(request_ptrs[i])) {
 	    rc = MPIR_Request_complete(&array_of_requests[i], request_ptrs[i],
 				       status_ptr, &active_flag);
 	    if (active_flag)
diff --git a/src/mpi/pt2pt/wait.c b/src/mpi/pt2pt/wait.c
index 219dfd4..2d609ac 100644
--- a/src/mpi/pt2pt/wait.c
+++ b/src/mpi/pt2pt/wait.c
@@ -43,11 +43,6 @@ int MPIR_Wait_impl(MPI_Request *request, MPI_Status *status)
 
     MPID_Request_get_ptr(*request, request_ptr);
 
-    if (MPID_Request_is_pending_failure(request_ptr)) {
-        mpi_errno = request_ptr->status.MPI_ERROR;
-        goto fn_fail;
-    }
-
     if (!MPID_Request_is_complete(request_ptr))
     {
 	MPID_Progress_state progress_state;
diff --git a/src/mpi/pt2pt/waitall.c b/src/mpi/pt2pt/waitall.c
index fe7c581..9613093 100644
--- a/src/mpi/pt2pt/waitall.c
+++ b/src/mpi/pt2pt/waitall.c
@@ -154,7 +154,7 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
         }
         
         /* wait for ith request to complete */
-        while (!MPID_Request_is_complete(request_ptrs[i]) && !MPID_Request_is_pending_failure(request_ptrs[i]))
+        while (!MPID_Request_is_complete(request_ptrs[i]))
         {
             /* generalized requests should already be finished */
             MPIU_Assert(request_ptrs[i]->kind != MPID_UREQUEST);
@@ -172,11 +172,8 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
             /* complete the request and check the status */
             status_ptr = (ignoring_statuses) ? MPI_STATUS_IGNORE : &array_of_statuses[i];
             rc = MPIR_Request_complete(&array_of_requests[i], request_ptrs[i], status_ptr, &active_flag);
-        } else {
-            /* If the request isn't complete, it's because it's pending due
-             * to a failure so set the rc accordingly. */
-            rc = request_ptrs[i]->status.MPI_ERROR;
-            proc_failure = 1;
+        }
+
         }
         if (rc == MPI_SUCCESS)
         {
diff --git a/src/mpi/pt2pt/waitany.c b/src/mpi/pt2pt/waitany.c
index cd48d38..ff894b9 100644
--- a/src/mpi/pt2pt/waitany.c
+++ b/src/mpi/pt2pt/waitany.c
@@ -156,11 +156,6 @@ int MPI_Waitany(int count, MPI_Request array_of_requests[], int *indx,
             /* we found at least one non-null request */
             found_nonnull_req = TRUE;
 
-            if (MPID_Request_is_pending_failure(request_ptrs[i])) {
-                mpi_errno = request_ptrs[i]->status.MPI_ERROR;
-                goto fn_progress_end_fail;
-            }
-
             if (request_ptrs[i]->kind == MPID_UREQUEST && request_ptrs[i]->greq_fns->poll_fn != NULL)
 	    {
                 /* this is a generalized request; make progress on it */
diff --git a/src/mpi/pt2pt/waitsome.c b/src/mpi/pt2pt/waitsome.c
index ee8cca3..3268b94 100644
--- a/src/mpi/pt2pt/waitsome.c
+++ b/src/mpi/pt2pt/waitsome.c
@@ -221,12 +221,6 @@ int MPI_Waitsome(int incount, MPI_Request array_of_requests[],
 		    request_ptrs[i] = NULL;
 		    n_inactive += 1;
 		}
-            } else if ( request_ptrs[i] != NULL && MPID_Request_is_pending_failure(request_ptrs[i])) {
-                n_active += 1;
-                mpi_errno = MPI_ERR_IN_STATUS;
-                if (status_ptr != MPI_STATUS_IGNORE) {
-                    status_ptr->MPI_ERROR = request_ptrs[i]->status.MPI_ERROR;
-                }
             }
 	}
 
diff --git a/src/mpid/ch3/include/mpidimpl.h b/src/mpid/ch3/include/mpidimpl.h
index 233a7eb..1c924be 100644
--- a/src/mpid/ch3/include/mpidimpl.h
+++ b/src/mpid/ch3/include/mpidimpl.h
@@ -1527,7 +1527,6 @@ MPID_Request * MPIDI_CH3U_Recvq_FDP_or_AEU(MPIDI_Message_match * match,
 					   int * found);
 int MPIDI_CH3U_Recvq_count_unexp(void);
 int MPIDI_CH3U_Complete_posted_with_error(MPIDI_VC_t *vc);
-int MPIDI_CH3U_Complete_disabled_anysources(void);
 int MPIDI_CH3U_Clean_recvq(MPID_Comm *comm_ptr);
 
 
diff --git a/src/mpid/ch3/src/ch3u_comm.c b/src/mpid/ch3/src/ch3u_comm.c
index 46bfe64..f9642fb 100644
--- a/src/mpid/ch3/src/ch3u_comm.c
+++ b/src/mpid/ch3/src/ch3u_comm.c
@@ -384,12 +384,6 @@ int MPIDI_CH3I_Comm_handle_failed_procs(MPID_Group *new_failed_procs)
         }
     }
 
-    /* Now that we've marked communicators with disable anysource, we
-       complete-with-an-error all anysource receives posted on those
-       communicators */
-    mpi_errno = MPIDI_CH3U_Complete_disabled_anysources();
-    if (mpi_errno) MPIU_ERR_POP(mpi_errno);
-
  fn_exit:
     MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_COMM_HANDLE_FAILED_PROCS);
     return mpi_errno;
diff --git a/src/mpid/ch3/src/ch3u_recvq.c b/src/mpid/ch3/src/ch3u_recvq.c
index ff769f7..8ac6d89 100644
--- a/src/mpid/ch3/src/ch3u_recvq.c
+++ b/src/mpid/ch3/src/ch3u_recvq.c
@@ -559,12 +559,6 @@ MPID_Request * MPIDI_CH3U_Recvq_FDU_or_AEP(int source, int tag,
             if (tag == MPI_ANY_TAG)
                 match.parts.tag = mask.parts.tag = 0;
             if (source == MPI_ANY_SOURCE) {
-                if (!MPIDI_CH3I_Comm_AS_enabled(comm)) {
-                    /* If MPI_ANY_SOURCE is disabled right now, we should
-                     * just add this request to the posted queue instead and
-                     * return the appropriate error. */
-                    continue;
-                }
                 match.parts.rank = mask.parts.rank = 0;
             }
             do {
@@ -639,17 +633,8 @@ MPID_Request * MPIDI_CH3U_Recvq_FDU_or_AEP(int source, int tag,
                 MPIDI_CH3U_Request_complete(rreq);
                 goto lock_exit;
             }
-        } else if (!MPIDI_CH3I_Comm_AS_enabled(comm)) {
-            /* If this receive is for MPI_ANY_SOURCE, we will still add the
-            * request to the queue for now, but we will also set the error
-            * class to MPIX_ERR_PROC_FAILED_PENDING since the request shouldn't
-            * be matched as long as there is a failure pending. This will get
-            * checked again later during the completion function to see if the
-            * request can be completed at that time. */
-            MPIU_ERR_SET(mpi_errno, MPIX_ERR_PROC_FAILED_PENDING, "**failure_pending");
-            rreq->status.MPI_ERROR = mpi_errno;
         }
-        
+
 	rreq->dev.next = NULL;
 	if (recvq_posted_tail != NULL) {
 	    recvq_posted_tail->dev.next = rreq;
@@ -1135,46 +1120,6 @@ int MPIDI_CH3U_Clean_recvq(MPID_Comm *comm_ptr)
 }
 
 #undef FUNCNAME
-#define FUNCNAME MPIDI_CH3U_Complete_disabled_anysources
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-int MPIDI_CH3U_Complete_disabled_anysources(void)
-{
-    int mpi_errno = MPI_SUCCESS;
-    MPID_Request *req, *prev_req;
-    int error = MPI_SUCCESS;
-    MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3U_COMPLETE_DISABLED_ANYSOURCES);
-
-    MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3U_COMPLETE_DISABLED_ANYSOURCES);
-    MPIU_THREAD_CS_ENTER(MSGQUEUE,);
-
-    MPIU_ERR_SETSIMPLE(error, MPIX_ERR_PROC_FAILED_PENDING, "**failure_pending");
-
-    /* Check each request in the posted queue, and complete-with-error any
-       anysource requests posted on communicators that have disabled
-       anysources */
-    req = recvq_posted_head;
-    prev_req = NULL;
-    while (req) {
-        if (req->dev.match.parts.rank == MPI_ANY_SOURCE && !MPIDI_CH3I_Comm_AS_enabled(req->comm)) {
-            dequeue_and_set_error(&req, prev_req, &recvq_posted_head, &recvq_posted_tail, &error, MPI_PROC_NULL); /* we don't know the rank of the failed proc */
-        } else {
-            prev_req = req;
-            req = req->dev.next;
-        }
-    }
-
- fn_exit:
-    MPIU_THREAD_CS_EXIT(MSGQUEUE,);
-
-    MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3U_COMPLETE_DISABLED_ANYSOURCES);
-    return mpi_errno;
- fn_fail:
-    goto fn_exit;
-}
-
-
-#undef FUNCNAME
 #define FUNCNAME MPIDU_Complete_posted_with_error
 #undef FCNAME
 #define FCNAME MPIU_QUOTE(FUNCNAME)
diff --git a/src/mpid/ch3/src/mpid_comm_failure_ack.c b/src/mpid/ch3/src/mpid_comm_failure_ack.c
index aa6b8ac..e64a7f4 100644
--- a/src/mpid/ch3/src/mpid_comm_failure_ack.c
+++ b/src/mpid/ch3/src/mpid_comm_failure_ack.c
@@ -148,37 +148,3 @@ int MPID_Comm_failed_bitarray(MPID_Comm *comm_ptr, uint32_t **bitarray, int acke
     goto fn_exit;
 }
 
-#undef FUNCNAME
-#define FUNCNAME MPID_Request_is_pending_failure
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-int MPID_Request_is_pending_failure(MPID_Request *request_ptr)
-{
-    int ret = 0;
-    MPIDI_STATE_DECL(MPID_STATE_REQUEST_IS_PENDING_FAILURE);
-    MPIDI_FUNC_ENTER(MPID_STATE_REQUEST_IS_PENDING_FAILURE);
-
-    if (NULL == request_ptr || NULL == request_ptr->comm) {
-        goto fn_exit;
-    }
-
-    if (request_ptr->dev.match.parts.rank != MPI_ANY_SOURCE) {
-        goto fn_exit;
-    }
-
-    /* If the request is pending and the communicator has MPI_ANY_SOURCE
-     * enabled, then we can mark the request as not pending and let the
-     * request continue. */
-    if (MPIDI_CH3I_Comm_AS_enabled(request_ptr->comm)) {
-        request_ptr->status.MPI_ERROR = MPI_SUCCESS;
-        goto fn_exit;
-    }
-
-    /* Otherwise, the request shouldn't go into the progress engine. */
-    ret = 1;
-
-fn_exit:
-    MPIU_DBG_MSG_S(CH3_OTHER, VERBOSE, "Request is%spending failure", ret ? " " : " not ");
-    MPIDI_FUNC_EXIT(MPID_STATE_REQUEST_IS_PENDING_FAILURE);
-    return ret;
-}
diff --git a/src/mpid/ch3/src/mpid_irecv.c b/src/mpid/ch3/src/mpid_irecv.c
index 5f22202..e0cc472 100644
--- a/src/mpid/ch3/src/mpid_irecv.c
+++ b/src/mpid/ch3/src/mpid_irecv.c
@@ -49,10 +49,6 @@ int MPID_Irecv(void * buf, int count, MPI_Datatype datatype, int rank, int tag,
 	MPIU_ERR_SETANDJUMP(mpi_errno,MPI_ERR_OTHER,"**nomemreq");
     }
 
-    if (MPIR_ERR_GET_CLASS(rreq->status.MPI_ERROR) == MPIX_ERR_PROC_FAILED_PENDING) {
-        mpi_errno = rreq->status.MPI_ERROR;
-    }
-
     if (found)
     {
 	MPIDI_VC_t * vc;

http://git.mpich.org/mpich.git/commitdiff/a96ac72edde12b9ddfbb2c20b92d51bda71e0840

commit a96ac72edde12b9ddfbb2c20b92d51bda71e0840
Author: Wesley Bland <wbland at anl.gov>
Date:   Mon Nov 24 15:13:56 2014 -0500

    Don't free a request if it still pending
    
    If we had a failure that caused a request to be pending, we were freeing
    the request before calling the error handler. That caused segfaults. Now
    we switch the ordering of the two to avoid that.
    
    This also moves the assignment of the status_ptr to be a little earlier
    to avoid another segfault.
    
    Signed-off-by: Huiwei Lu <huiweilu at mcs.anl.gov>

diff --git a/src/mpi/pt2pt/test.c b/src/mpi/pt2pt/test.c
index 38775bf..acf2f2d 100644
--- a/src/mpi/pt2pt/test.c
+++ b/src/mpi/pt2pt/test.c
@@ -60,16 +60,16 @@ int MPIR_Test_impl(MPI_Request *request, int *flag, MPI_Status *status)
         if (mpi_errno) MPIU_ERR_POP(mpi_errno);
     }
 
-    if (MPID_Request_is_complete(request_ptr)) {
+    if (MPID_Request_is_pending_failure(request_ptr)) {
+        *flag = TRUE;
+        mpi_errno = request_ptr->status.MPI_ERROR;
+        goto fn_fail;
+    } else if (MPID_Request_is_complete(request_ptr)) {
 	mpi_errno = MPIR_Request_complete(request, request_ptr, status,
 					  &active_flag);
 	*flag = TRUE;
 	if (mpi_errno) MPIU_ERR_POP(mpi_errno);
 	/* Fall through to the exit */
-    } else if (MPID_Request_is_pending_failure(request_ptr)) {
-        *flag = TRUE;
-        mpi_errno = request_ptr->status.MPI_ERROR;
-        goto fn_fail;
     }
         
  fn_exit:
diff --git a/src/mpi/pt2pt/testany.c b/src/mpi/pt2pt/testany.c
index 72112fa..fa7cb58 100644
--- a/src/mpi/pt2pt/testany.c
+++ b/src/mpi/pt2pt/testany.c
@@ -168,7 +168,12 @@ int MPI_Testany(int count, MPI_Request array_of_requests[], int *indx,
                                                              status);
 	    if (mpi_errno != MPI_SUCCESS) goto fn_fail;
 	}
-	if (request_ptrs[i] != NULL && MPID_Request_is_complete(request_ptrs[i]))
+        if (request_ptrs[i] != NULL && MPID_Request_is_pending_failure(request_ptrs[i])) {
+            mpi_errno = request_ptrs[i]->status.MPI_ERROR;
+            *flag = TRUE;
+            *indx = i;
+            goto fn_fail;
+        } else if (request_ptrs[i] != NULL && MPID_Request_is_complete(request_ptrs[i]))
 	{
 	    mpi_errno = MPIR_Request_complete(&array_of_requests[i], 
 					      request_ptrs[i], 
@@ -183,11 +188,6 @@ int MPI_Testany(int count, MPI_Request array_of_requests[], int *indx,
 	    {
 		n_inactive += 1;
 	    }
-        } else if (request_ptrs[i] != NULL && MPID_Request_is_pending_failure(request_ptrs[i])) {
-            mpi_errno = request_ptrs[i]->status.MPI_ERROR;
-            *flag = TRUE;
-            *indx = i;
-            goto fn_fail;
         }
     }
     
diff --git a/src/mpi/pt2pt/testsome.c b/src/mpi/pt2pt/testsome.c
index 4f528b3..0240b76 100644
--- a/src/mpi/pt2pt/testsome.c
+++ b/src/mpi/pt2pt/testsome.c
@@ -169,9 +169,16 @@ int MPI_Testsome(int incount, MPI_Request array_of_requests[], int *outcount,
                                                              array_of_statuses);
 	    if (mpi_errno != MPI_SUCCESS) goto fn_fail;
 	}
-	if (request_ptrs[i] != NULL && MPID_Request_is_complete(request_ptrs[i]))
-	{
-	    status_ptr = (array_of_statuses != MPI_STATUSES_IGNORE) ? &array_of_statuses[n_active] : MPI_STATUS_IGNORE;
+        status_ptr = (array_of_statuses != MPI_STATUSES_IGNORE) ? &array_of_statuses[n_active] : MPI_STATUS_IGNORE;
+        if (request_ptrs[i] != NULL && MPID_Request_is_pending_failure(request_ptrs[i])) {
+            mpi_errno = MPI_ERR_IN_STATUS;
+            array_of_indices[n_active] = i;
+            n_active += 1;
+            rc = request_ptrs[i]->status.MPI_ERROR;
+            if (status_ptr != MPI_STATUS_IGNORE) {
+                status_ptr->MPI_ERROR = rc;
+            }
+        } else if (request_ptrs[i] != NULL && MPID_Request_is_complete(request_ptrs[i])) {
 	    rc = MPIR_Request_complete(&array_of_requests[i], request_ptrs[i],
 				       status_ptr, &active_flag);
 	    if (active_flag)
@@ -197,12 +204,6 @@ int MPI_Testsome(int incount, MPI_Request array_of_requests[], int *outcount,
 		request_ptrs[i] = NULL;
 		n_inactive += 1;
 	    }
-        } else if (request_ptrs[i] != NULL && MPID_Request_is_pending_failure(request_ptrs[i])) {
-            mpi_errno = MPI_ERR_IN_STATUS;
-            array_of_indices[n_active] = i;
-            n_active += 1;
-            rc = request_ptrs[i]->status.MPI_ERROR;
-            status_ptr->MPI_ERROR = rc;
         }
     }
 

-----------------------------------------------------------------------

Summary of changes:
 src/include/mpiimpl.h                    |   20 +------
 src/mpi/pt2pt/mpir_request.c             |    8 ++--
 src/mpi/pt2pt/recv.c                     |   13 +++++
 src/mpi/pt2pt/sendrecv.c                 |   17 ++++++
 src/mpi/pt2pt/test.c                     |   10 ++--
 src/mpi/pt2pt/testall.c                  |   31 +++++++----
 src/mpi/pt2pt/testany.c                  |   54 ++++++++++++-------
 src/mpi/pt2pt/testsome.c                 |   72 +++++++++++++------------
 src/mpi/pt2pt/wait.c                     |   28 ++++++++--
 src/mpi/pt2pt/waitall.c                  |   47 +++++++++++++---
 src/mpi/pt2pt/waitany.c                  |   21 +++++--
 src/mpi/pt2pt/waitsome.c                 |   85 ++++++++++++++++++-----------
 src/mpid/ch3/include/mpidimpl.h          |    1 -
 src/mpid/ch3/include/mpidpre.h           |    3 +-
 src/mpid/ch3/src/ch3u_comm.c             |    8 +--
 src/mpid/ch3/src/ch3u_recvq.c            |   57 +-------------------
 src/mpid/ch3/src/mpid_comm_failure_ack.c |   34 ------------
 src/mpid/ch3/src/mpid_irecv.c            |    4 --
 test/mpi/ft/anysource.c                  |    6 +-
 19 files changed, 273 insertions(+), 246 deletions(-)


hooks/post-receive
-- 
MPICH primary repository


More information about the commits mailing list