diff --git a/maestro/ofi.c b/maestro/ofi.c index 07ba33064c61f2aead39226b0b283939ed9dafb1..1ab773618ed80139d0772c78b58c4f75bd575318 100644 --- a/maestro/ofi.c +++ b/maestro/ofi.c @@ -1211,25 +1211,28 @@ mstro_endpoint_describe(const struct mstro_endpoint *ep) char strbuf[EP_DESC_BUF_MAX]; char addrbuf[EP_DESC_BUF_MAX]; - ep_name_buf[0]='\0'; + strncpy(ep_name_buf, "(unprintable)", EP_DESC_BUF_MAX); - size=0; - ret = fi_getname(&ep->ep->fid,NULL,&size); - if(ret!=-FI_ETOOSMALL) { + /* first: fetch address */ + size=EP_DESC_BUF_MAX; + ret = fi_getname(&ep->ep->fid,addrbuf,&size); + DEBUG("addrbuf len %zu, ret %d\n", size, ret); + if(ret<0 && ret!=-FI_ETOOSMALL) { ERR("fi_getname in EP describe failed: %d (%s)\n", ret, fi_strerror(-ret)); goto DONE; } - assert(size<EP_DESC_BUF_MAX); - fi_getname(&ep->ep->fid,addrbuf,&size); - + + /* now translate to string */ + size = EP_DESC_BUF_MAX; + /* may truncate but will 0-terminate the strbuf */ fi_av_straddr(ep->av, addrbuf, strbuf, &size); - assert(size<EP_DESC_BUF_MAX); + DEBUG("strbuf len %zu, val %s\n", size, strbuf); size=snprintf(ep_name_buf, EP_DESC_BUF_MAX, "OFI EP prov %s name %s straddr %s", ep->fi->fabric_attr->prov_name, ep->fi->fabric_attr->name, strbuf); - assert(size<1024); + assert(size<EP_DESC_BUF_MAX); DONE: return ep_name_buf; }