> Index: umad.cpp
> 
> ===================================================================
> 
> --- umad.cpp      (revision 7570)
> 
> +++ umad.cpp   (revision 7571)
> 
> @@ -613,11 +613,11 @@
> 
> 
> 
>                 umad_convert_addr(&mad->addr, &((WM_MAD *) mad)->Address);
> 
>                 hr = ports[portid].prov->Send((WM_MAD *) mad, NULL);
> 
> -              umad_convert_av(&((WM_MAD *) mad)->Address, &mad->addr);
> 
>                 if (FAILED(hr)) {
> 
>                                 _set_errno(EIO);
> 
>                                 return GetLastError();
> 
>                 }
> 
> +             umad_convert_av(&((WM_MAD *) mad)->Address, &mad->addr);

There is something else wrong here, possibly in the upper layer.  The caller is 
freeing the memory referenced by the *umad parameter while the umad_send() call 
is still operating on it.  They could just as easily free the *umad memory in 
the success case. 

It looks like the caller may be using an event to indicate that umad_send() is 
done with the buffer, which is not the case.  If you have full details on 
what's happening, we may want to bring this up with the opensm maintainer to 
make sure that we have the right solution.

- Sean
_______________________________________________
ofw mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ofw

Reply via email to