Hi all, Sorry no reply.
I just figured out the solution. The problem was that I had a function that would MPI_Isend a message on every call to it. Then I'd store its request pointer to a list. My MPI_Isend snippet: MPI_Request req; MPI_Isend(blabla, &req) task_push(&req); >From time to time at the beginning of that function I'd call another function that would iterate over that list MPI_Testing if that message had completed to then free the buffers used. The problem was that even if the flag returned from MPI_Test(&req, &flag, &status) previouly assigned to 0 returned 1 but my guess is that C had already deallocated it from the heap (idk much about C though..) Snippet of my clean function: .... int flag = 0; MPI_Test(req, &flag, &status); if (flag) { // then free.. ... My solution that worked was previously malloc it before the MPI_Isend call like: MPI_Request *rr = (MPI_Request *)malloc(sizeof(MPI_Request)); MPI_Isend(blabla...., rr); task_push(rr); All I know is that it's working now.. Thanks to all. Regards, C. On Sun, Jul 28, 2019 at 11:53 AM Jeff Squyres (jsquyres) via users < users@lists.open-mpi.org> wrote: > On Jul 27, 2019, at 10:43 PM, Gilles Gouaillardet via users < > users@lists.open-mpi.org> wrote: > > > > MPI_Isend() does not automatically frees the buffer after it sends the > message. > > (it simply cannot do it since the buffer might be pointing to a global > > variable or to the stack). > > Gilles is correct: MPI_Isend does not free the buffer. I was wondering if > you had somehow used that same buffer -- or some subset of that buffer -- > in other non-blocking MPI API calls, and freeing it triggered Bad Things > because MPI was still using (some of) that buffer because of other pending > MPI requests. > > > Can you please extract a reproducer from your program ? > > Yes, please do this. > > > Out of curiosity, what if you insert an (useless) MPI_Wait() like this ? > > > > MPI_Test(req, &flag, &status); > > if (flag){ > > MPI_Wait(req, MPI_STATUS_IGNORE); > > free(buffer); > > } > > That should be a no-op, because "req" should have been turned into > MPI_REQUEST_NULL if flag==true. > > -- > Jeff Squyres > jsquy...@cisco.com > > _______________________________________________ > users mailing list > users@lists.open-mpi.org > https://lists.open-mpi.org/mailman/listinfo/users >
_______________________________________________ users mailing list users@lists.open-mpi.org https://lists.open-mpi.org/mailman/listinfo/users