diff --git a/src/uct/ib/rdmacm/rdmacm_cm_ep.c b/src/uct/ib/rdmacm/rdmacm_cm_ep.c index e33f10257e2..16377933d0c 100644 --- a/src/uct/ib/rdmacm/rdmacm_cm_ep.c +++ b/src/uct/ib/rdmacm/rdmacm_cm_ep.c @@ -16,8 +16,10 @@ const char* uct_rdmacm_cm_ep_str(uct_rdmacm_cm_ep_t *cep, char *str, size_t max_len) { - struct sockaddr *local_addr = rdma_get_local_addr(cep->id); - struct sockaddr *remote_addr = rdma_get_peer_addr(cep->id); + struct sockaddr *local_addr = (cep->id != NULL) ? + rdma_get_local_addr(cep->id) : NULL; + struct sockaddr *remote_addr = (cep->id != NULL) ? + rdma_get_peer_addr(cep->id) : NULL; char flags_buf[UCT_RDMACM_EP_FLAGS_STRING_LEN]; char local_ip_port_str[UCS_SOCKADDR_STRING_LEN]; char remote_ip_port_str[UCS_SOCKADDR_STRING_LEN]; @@ -33,13 +35,13 @@ const char* uct_rdmacm_cm_ep_str(uct_rdmacm_cm_ep_t *cep, char *str, NULL }; - if (ucs_sockaddr_is_known_af(local_addr)) { + if ((local_addr != NULL) && ucs_sockaddr_is_known_af(local_addr)) { ucs_sockaddr_str(local_addr, local_ip_port_str, UCS_SOCKADDR_STRING_LEN); } else { ucs_strncpy_safe(local_ip_port_str, "", UCS_SOCKADDR_STRING_LEN); } - if (ucs_sockaddr_is_known_af(remote_addr)) { + if ((remote_addr != NULL) && ucs_sockaddr_is_known_af(remote_addr)) { ucs_sockaddr_str(remote_addr, remote_ip_port_str, UCS_SOCKADDR_STRING_LEN); } else { ucs_strncpy_safe(remote_ip_port_str, "", UCS_SOCKADDR_STRING_LEN); @@ -312,6 +314,7 @@ static ucs_status_t uct_rdamcm_cm_ep_server_init(uct_rdmacm_cm_ep_t *cep, ucs_status_t status; char ep_str[UCT_RDMACM_EP_STRING_LEN]; + cep->id = event->id; cep->flags |= UCT_RDMACM_CM_EP_ON_SERVER; if (event->listen_id->channel != cm->ev_ch) { @@ -338,7 +341,6 @@ static ucs_status_t uct_rdamcm_cm_ep_server_init(uct_rdmacm_cm_ep_t *cep, goto err; } - cep->id = event->id; cep->id->context = cep; memset(&conn_param, 0, sizeof(conn_param)); @@ -464,6 +466,7 @@ UCS_CLASS_INIT_FUNC(uct_rdmacm_cm_ep_t, const uct_ep_params_t *params) self->qp = NULL; self->flags = 0; self->status = UCS_OK; + self->id = NULL; if (params->field_mask & UCT_EP_PARAM_FIELD_SOCKADDR) { status = uct_rdamcm_cm_ep_client_init(self, params);