ucs_status_ptr_t ucp_tag_send_nb(ucp_ep_h ep, const void *buffer, size_t count, uintptr_t datatype, ucp_tag_t tag, ucp_send_callback_t cb) { ucs_status_t status; ucs_trace_req("send_nb buffer %p count %zu tag %"PRIx64" to %s cb %p", buffer, count, tag, ucp_ep_peer_name(ep), cb); status = ucp_tag_send_try(ep, buffer, count, datatype, tag); if (ucs_likely(status != UCS_ERR_NO_RESOURCE)) { return UCS_STATUS_PTR(status); /* UCS_OK also goes here */ } return ucp_tag_send_slow(ep, buffer, count, datatype, tag, cb); }
ucs_status_ptr_t ucp_tag_send_nb(ucp_ep_h ep, const void *buffer, size_t count, uintptr_t datatype, ucp_tag_t tag, ucp_send_callback_t cb) { ucs_status_t status; ucp_request_t *req; ucs_trace_req("send_nb buffer %p count %zu tag %"PRIx64" to %s", buffer, count, tag, ucp_ep_peer_name(ep)); status = ucp_tag_send_try(ep, buffer, count, datatype, tag); if (ucs_likely(status != UCS_ERR_NO_RESOURCE)) { return UCS_STATUS_PTR(status); /* UCS_OK also goes here */ } req = ucs_mpool_get(&ep->worker->req_mp); if (req == NULL) { return UCS_STATUS_PTR(UCS_ERR_NO_MEMORY); } VALGRIND_MAKE_MEM_DEFINED(req + 1, ep->worker->context->config.request.size); req->flags = 0; req->cb.send = cb; status = ucp_tag_send_start_req(ep, buffer, count, datatype, tag, req); if (status != UCS_OK) { return UCS_STATUS_PTR(status); /* UCS_OK also goes here */ } if (!(req->flags & UCP_REQUEST_FLAG_COMPLETED)) { ucp_ep_add_pending(ep, ep->uct_ep, req); ucp_worker_progress(ep->worker); } ucs_trace_req("send_nb returning request %p", req); return req + 1; }