From 411c069ba66fb10b0e1121d0499b7e888cac9c80 Mon Sep 17 00:00:00 2001
From: Tim Mattox <timothy.mattox@engilitycorp.com>
Date: Fri, 17 Mar 2017 02:36:41 -0400
Subject: [PATCH] BUGFIX: Prevent possible deadlock in Irregular::create_atom
 and create_data

---
 src/irregular.cpp | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/irregular.cpp b/src/irregular.cpp
index 3947001541..d0210244fb 100644
--- a/src/irregular.cpp
+++ b/src/irregular.cpp
@@ -395,7 +395,9 @@ int Irregular::create_atom(int n, int *sizes, int *proclist, int sortflag)
 
   sendmax_proc = 0;
   for (i = 0; i < nsend_proc; i++) {
-    MPI_Send(&length_send[i],1,MPI_INT,proc_send[i],0,world);
+    MPI_Request tmpReq; // Use non-blocking send to avoid possible deadlock
+    MPI_Isend(&length_send[i],1,MPI_INT,proc_send[i],0,world,&tmpReq);
+    MPI_Request_free(&tmpReq); // the MPI_Barrier below marks completion
     sendmax_proc = MAX(sendmax_proc,length_send[i]);
   }
 
@@ -641,7 +643,9 @@ int Irregular::create_data(int n, int *proclist, int sortflag)
 
   sendmax_proc = 0;
   for (i = 0; i < nsend_proc; i++) {
-    MPI_Send(&num_send[i],1,MPI_INT,proc_send[i],0,world);
+    MPI_Request tmpReq; // Use non-blocking send to avoid possible deadlock
+    MPI_Isend(&num_send[i],1,MPI_INT,proc_send[i],0,world,&tmpReq);
+    MPI_Request_free(&tmpReq); // the MPI_Barrier below marks completion
     sendmax_proc = MAX(sendmax_proc,num_send[i]);
   }
 
-- 
GitLab