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

Reply via email to