<div dir="ltr">Hello,<br><br>I&#39;m implementing a server in MPI that accepts more than one connection from clients at the same time.<br>For do that I used MPI(mpich2-1.1.0a1.tar.gz) and pthreads.<br><br>What I want to do is a server that stays in a infinity loop waiting for connections (MPI_Comm_accept(portMD, MPI_INFO_NULL, 0, MPI_COMM_WORLD, newCommClient);). When a connection is established, he creates a new thread and return to wait more connections.&nbsp; That means, the server and the thread will work in parallel.<br>
<br>The function that the thread will execute calls mpi functions, like MPI_probe, MPI_Get_count, MPI_Recv, MPI_Send,&nbsp; MPI_Pack and&nbsp; MPI_Unpack.<br><br>The problem I&#39;m having is that the server and the thread are not working in parallel successfully. Sometimes, the program hangs, do nothing, and in another times a fatal error appears (Assertion failed in file sock_wait.i at line 236: (pollfd-&gt;events &amp; (0x001 | 0x004)) || pollfd-&gt;fd == -1).<br>
<br>When I put the server to sleep for a moment, before he will wait another connection, during the time he was sleeping the created thread works fine. Once the server wakes up and starts to wait for a connection, things stop working.<br>
<br>A peace of my code (Server):<br>-----------------------------------------------------------------------------------------------------------------------------<br>// arguments passed to a thread<br>typedef struct<br>{ MPI_Comm communicator;<br>
&nbsp; char * path1;<br>&nbsp; char * path2;<br>&nbsp; char * port;&nbsp;&nbsp; <br>} ThreadParam;<br><br>&nbsp;pthread_t threads[10];<br>&nbsp;int t =0;<br>&nbsp;int rc;<br><br><br>&nbsp;ThreadParam * listParam = NULL;<br>&nbsp;MPI_Comm * newCommClient;<br>&nbsp;&nbsp;&nbsp; <br><br>&nbsp; /* server&nbsp; infinity loop */<br>
&nbsp;while (time_out &gt; 10)<br>&nbsp;{<br>&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; newCommClient = malloc(sizeof(MPI_Comm));<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; /* waiting for a connection */<br>&nbsp;&nbsp;&nbsp;&nbsp; MPI_Comm_accept(portMD, MPI_INFO_NULL, 0, MPI_COMM_WORLD, newCommClient);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; listParam = malloc(sizeof(ThreadParam));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; listParam-&gt;communicator = *newCommClient; //with this communicator the thread will talk with the&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //client <br>
&nbsp;&nbsp;&nbsp;&nbsp; listParam-&gt;path1 = argv[2];<br>&nbsp;&nbsp;&nbsp;&nbsp; listParam-&gt;path2 = argv[4];<br>&nbsp;&nbsp;&nbsp;&nbsp; listParam-&gt;port = portMD;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; rc = pthread_create(&amp;threads[t], NULL, threadfunc, (void *) listParam);<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; if (rc){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;ERROR; return code from pthread_create() is %d\n&quot;, rc);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit(-1);<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp; //sleep(1); <br>&nbsp;&nbsp;&nbsp;&nbsp; t++;<br>&nbsp; }<br><br>-----------------------------------------------------------------------------------------------------------------------------<br>
Please, I need help to solve this problem!!<br><br>Thanks very mych!<br><br>Gisele<br></div>