<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace"><b>Hi,</b></font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace"><b><br></b></font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace"><b>Here is a short program which shows an MPI crash when multiple MPI_Comm_spawn calls are made. Previously, it was found that it is necessary to call MPI_Comm_disconnect from both the worker and master processes to make sure that the spawned processes actually die. Unfortunately, this second issue may be related to that fix --- if I remove the disconnects the crash disappears.</b></font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace"><b><br></b></font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace"><b>Here is the crash message...</b></font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace"><b><br></b></font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace"><b><div>Fatal error in MPI_Init: Other MPI error, error stack:</div>
<div>MPIR_Init_thread(392).................: </div><div>MPID_Init(139)........................: channel initialization failed</div><div>MPIDI_CH3_Init(38)....................: </div><div>MPID_nem_init(196)....................: </div>
<div>MPIDI_CH3I_Seg_commit(366)............: </div><div>MPIU_SHMW_Hnd_deserialize(324)........: </div><div>MPIU_SHMW_Seg_open(863)...............: </div><div>MPIU_SHMW_Seg_create_attach_templ(637): open failed - No such file or directory</div>
<div><br></div><div>&lt;repeated a number of times&gt;</div><div><br></div><div>Thanks,</div><div><br></div><div>Jon</div></b></font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace"><br></font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace"><br></font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">#include &lt;iostream&gt;</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">#include &quot;mpi.h&quot;</font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace"><br></font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">using namespace std;</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace"><br>
</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">const int BUFSIZE = 1000;</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">const int NWORKER = 10;</font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">const int NPASS = 10;</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace"><br></font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">int main(int argc, char **argv)</font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">{</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">  MPI_Init(&amp;argc, &amp;argv);</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">  MPI_Comm parent;</font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">  MPI_Comm_get_parent(&amp;parent);</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace"><br></font></div><div>
<font class="Apple-style-span" face="&#39;courier new&#39;, monospace">  // Master</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">  if (parent == MPI_COMM_NULL) {</font></div><div>
<font class="Apple-style-span" face="&#39;courier new&#39;, monospace">    for (int i = 0; i &lt; NPASS; i++) {</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">      cout &lt;&lt; &quot;pass &quot; &lt;&lt; i &lt;&lt; &quot; =============&quot; &lt;&lt; endl;</font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">      MPI_Comm intercom = MPI_COMM_NULL;</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">      cout &lt;&lt; &quot;spawn &quot; &lt;&lt; NWORKER &lt;&lt; endl;</font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">      MPI_Comm_spawn(argv[0], MPI_ARGV_NULL, NWORKER, MPI_INFO_NULL, 0, MPI_COMM_SELF, &amp;intercom, MPI_ERRCODES_IGNORE);</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">      for (int worker = 0; worker &lt; NWORKER; worker++) {</font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace"><span class="Apple-tab-span" style="white-space:pre">        </span>cout &lt;&lt; &quot;stop &quot; &lt;&lt; worker &lt;&lt; endl;</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace"><span class="Apple-tab-span" style="white-space:pre">        </span>char buf[BUFSIZE];</font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace"><span class="Apple-tab-span" style="white-space:pre">        </span>MPI_Send(buf, 0, MPI_CHAR, worker, 0, intercom);</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">      }</font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">      cout &lt;&lt; &quot;disconnnect&quot; &lt;&lt; endl;</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">      MPI_Comm_disconnect(&amp;intercom);</font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">      intercom = MPI_COMM_NULL;</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">    }</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">  }</font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace"><br></font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">  // Worker</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">  if (parent != MPI_COMM_NULL) {</font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">    char buf[BUFSIZE];</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">    MPI_Status status;</font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">    MPI_Recv(buf, BUFSIZE, MPI_CHAR, 0, MPI_ANY_TAG, parent, &amp;status);</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">    MPI_Comm_disconnect(&amp;parent);</font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">  }</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace"><br></font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">  MPI_Finalize();</font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace"><br></font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">  return 0;</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">}</font></div>
<div><br></div>