1
1

btl/ugni: fix leak in new sendi function.

cmr=v1.7.5:ticket=trac:4151

This commit was SVN r30365.

The following Trac tickets were found above:
  Ticket 4151 --> https://svn.open-mpi.org/trac/ompi/ticket/4151
Этот коммит содержится в:
Nathan Hjelm 2014-01-22 16:32:07 +00:00
родитель 66b69da394
Коммит ff4c9c808a

Просмотреть файл

@ -102,39 +102,39 @@ mca_btl_ugni_sendi (struct mca_btl_base_module_t *btl,
}
frag = mca_btl_ugni_prepare_src_send (btl, endpoint, convertor, order, header_size,
&packed_size, flags & ~MCA_BTL_DES_FLAGS_BTL_OWNERSHIP);
if (OPAL_UNLIKELY(NULL == frag || packed_size != payload_size)) {
&packed_size, flags);
assert (packed_size == payload_size);
if (OPAL_UNLIKELY(NULL == frag)) {
break;
}
frag->hdr.send.lag = (tag << 24) | total_size;
memcpy (frag->segments[0].base.seg_addr.pval, header, header_size);
frag->flags = MCA_BTL_UGNI_FRAG_IGNORE;
rc = mca_btl_ugni_send_frag (endpoint, frag);
if (OPAL_UNLIKELY(OPAL_SUCCESS != rc)) {
mca_btl_ugni_frag_return (frag);
break;
}
if (!(frag->flags & MCA_BTL_UGNI_FRAG_BUFFERED)) {
/* wait until the frag is received by the remote end */
while (!(frag->flags & MCA_BTL_UGNI_FRAG_COMPLETE)) {
while (!(frag->flags & MCA_BTL_UGNI_FRAG_SMSG_COMPLETE)) {
mca_btl_ugni_progress_local_smsg ((mca_btl_ugni_module_t *) btl);
}
}
frag->flags |= MCA_BTL_DES_FLAGS_BTL_OWNERSHIP;
frag->flags &= ~MCA_BTL_UGNI_FRAG_IGNORE;
if (frag->flags & MCA_BTL_UGNI_FRAG_COMPLETE) {
if (frag->flags & MCA_BTL_UGNI_FRAG_SMSG_COMPLETE) {
mca_btl_ugni_frag_return (frag);
}
return OMPI_SUCCESS;
} while (0);
if (frag) {
mca_btl_ugni_frag_return (frag);
}
*descriptor = NULL;
return OMPI_ERR_OUT_OF_RESOURCE;
}