From b02d8c48f5d52a71fd4c682cd27a955cf101bcf9 Mon Sep 17 00:00:00 2001 From: Jeff Squyres Date: Thu, 5 Jan 2017 00:58:59 +0000 Subject: [PATCH] usnic: make the releasing safer Since the usnic BTL is single-threaded in this area, there really is no danger, but don't use one of the pointers hanging off the frag after we return it to the freelist. Instead, save the endpoint pointer before returning the frag. Signed-off-by: Jeff Squyres --- opal/mca/btl/usnic/btl_usnic_send.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/opal/mca/btl/usnic/btl_usnic_send.c b/opal/mca/btl/usnic/btl_usnic_send.c index 9775602111..3bfb68a8e7 100644 --- a/opal/mca/btl/usnic/btl_usnic_send.c +++ b/opal/mca/btl/usnic/btl_usnic_send.c @@ -60,13 +60,18 @@ opal_btl_usnic_frag_send_complete(opal_btl_usnic_module_t *module, --frag->sf_seg_post_cnt; /* checks for returnability made inside */ + opal_btl_usnic_endpoint_t *ep = frag->sf_endpoint; opal_btl_usnic_send_frag_return_cond(module, frag); + // In a short frag segment, the sseg is embedded in the frag. So + // there's no need to return the sseg (because we already returned + // the frag). + /* do bookkeeping */ - ++frag->sf_endpoint->endpoint_send_credits; + ++ep->endpoint_send_credits; /* see if this endpoint needs to be made ready-to-send */ - opal_btl_usnic_check_rts(frag->sf_endpoint); + opal_btl_usnic_check_rts(ep); ++module->mod_channels[sseg->ss_channel].credits; }