\r
/* create CM_ID, bind to local device, create QP */\r
if (rdma_create_id(g_cm_events, &cm_id, (void *)conn, RDMA_PS_TCP)) {\r
+ dapl_os_lock_destroy(&conn->lock);\r
dapl_os_free(conn, sizeof(*conn));\r
return NULL;\r
}\r
rdma_destroy_id(conn->cm_id);\r
}\r
\r
+ dapl_os_lock_destroy(&conn->lock);\r
dapl_os_free(conn, sizeof(*conn));\r
}\r
\r
/* create CM_ID, bind to local device, create QP */\r
if (rdma_create_id\r
(g_cm_events, &conn->cm_id, (void *)conn, RDMA_PS_TCP)) {\r
+ dapl_os_lock_destroy(&conn->lock);\r
dapl_os_free(conn, sizeof(*conn));\r
return (dapl_convert_errno(errno, "setup_listener"));\r
}\r
\r
bail:\r
rdma_destroy_id(conn->cm_id);\r
+ dapl_os_lock_destroy(&conn->lock);\r
dapl_os_free(conn, sizeof(*conn));\r
return dat_status;\r
}\r
dapl_os_sleep_usec(1000);\r
}\r
bail:\r
+ if (hca_ptr->ib_trans.ib_cq)\r
+ ibv_destroy_comp_channel(hca_ptr->ib_trans.ib_cq);\r
+\r
+ if (hca_ptr->ib_trans.ib_cq_empty) {\r
+ struct ibv_comp_channel *channel;\r
+ channel = hca_ptr->ib_trans.ib_cq_empty->channel;\r
+ ibv_destroy_cq(hca_ptr->ib_trans.ib_cq_empty);\r
+ ibv_destroy_comp_channel(channel);\r
+ }\r
+\r
if (hca_ptr->ib_hca_handle != IB_INVALID_HANDLE) {\r
if (rdma_destroy_id(hca_ptr->ib_trans.cm_id))\r
return (dapl_convert_errno(errno, "ib_close_device"));\r
closesocket(cm_ptr->socket);\r
}\r
dapl_os_unlock(&cm_ptr->lock);\r
+ dapl_os_lock_destroy(&cm_ptr->lock);\r
dapl_os_free(cm_ptr, sizeof(*cm_ptr));\r
return;\r
}\r
/* queue socket for processing CM work */\r
static void dapli_cm_queue(struct ib_cm_handle *cm_ptr)\r
{\r
+ DAPL_HCA *hca = cm_ptr->hca;\r
+\r
/* add to work queue for cr thread processing */\r
dapl_llist_init_entry((DAPL_LLIST_ENTRY *) & cm_ptr->entry);\r
- dapl_os_lock(&cm_ptr->hca->ib_trans.lock);\r
- dapl_llist_add_tail(&cm_ptr->hca->ib_trans.list,\r
+ dapl_os_lock(&hca->ib_trans.lock);\r
+ dapl_llist_add_tail(&hca->ib_trans.list,\r
(DAPL_LLIST_ENTRY *) & cm_ptr->entry, cm_ptr);\r
- dapl_os_unlock(&cm_ptr->hca->ib_trans.lock);\r
+ dapl_os_unlock(&hca->ib_trans.lock);\r
\r
/* wakeup CM work thread */\r
- send(cm_ptr->hca->ib_trans.scm[1], "w", sizeof "w", 0);\r
+ send(hca->ib_trans.scm[1], "w", sizeof "w", 0);\r
}\r
\r
/*\r
inet_ntoa(((struct sockaddr_in *)\r
&cr->msg.daddr.so)->sin_addr));\r
dapl_os_unlock(&cr->lock);\r
+ dapl_os_lock_destroy(&cr->lock);\r
dapls_ib_cm_free(cr, cr->ep);\r
continue;\r
}\r
}\r
\r
out:\r
+ if (hca_ptr->ib_trans.ib_cq)\r
+ ibv_destroy_comp_channel(hca_ptr->ib_trans.ib_cq);\r
+\r
+ if (hca_ptr->ib_trans.ib_cq_empty) {\r
+ struct ibv_comp_channel *channel;\r
+ channel = hca_ptr->ib_trans.ib_cq_empty->channel;\r
+ ibv_destroy_cq(hca_ptr->ib_trans.ib_cq_empty);\r
+ ibv_destroy_comp_channel(channel);\r
+ }\r
+\r
if (hca_ptr->ib_hca_handle != IB_INVALID_HANDLE) {\r
if (ibv_close_device(hca_ptr->ib_hca_handle))\r
return (dapl_convert_errno(errno, "ib_close_device"));\r
/* cleanup, never made it to work queue */\r
if (cm->state == DCM_INIT) {\r
dapl_os_unlock(&cm->lock);\r
+ dapl_os_lock_destroy(&cm->lock);\r
dapl_os_free(cm, sizeof(*cm));\r
return;\r
}\r
cm->state = DCM_DESTROY;\r
dapl_os_unlock(&cm->lock);\r
ucm_dequeue_listen(cm);\r
+ dapl_os_lock_destroy(&cm->lock);\r
dapl_os_free(cm, sizeof(*cm));\r
}\r
return DAT_SUCCESS;\r
dapl_llist_remove_entry(&hca->ib_trans.list,\r
(DAPL_LLIST_ENTRY *)&cm->entry);\r
dapl_os_unlock(&cm->lock);\r
+ dapl_os_lock_destroy(&cm->lock);\r
dapl_os_free(cm, sizeof(*cm));\r
continue;\r
}\r
&hca->ib_trans.list,\r
(DAPL_LLIST_ENTRY *)&cm->entry);\r
dapl_os_unlock(&cm->lock);\r
+ dapl_os_lock_destroy(&cm->lock);\r
dapl_os_free(cm, sizeof(*cm));\r
continue;\r
}\r
destroy_os_signal(hca_ptr);
ucm_service_destroy(hca_ptr);
+ if (hca_ptr->ib_trans.ib_cq)\r
+ ibv_destroy_comp_channel(hca_ptr->ib_trans.ib_cq);\r
+\r
+ if (hca_ptr->ib_trans.ib_cq_empty) {\r
+ struct ibv_comp_channel *channel;\r
+ channel = hca_ptr->ib_trans.ib_cq_empty->channel;\r
+ ibv_destroy_cq(hca_ptr->ib_trans.ib_cq_empty);\r
+ ibv_destroy_comp_channel(channel);\r
+ }\r
+
if (hca_ptr->ib_hca_handle != IB_INVALID_HANDLE) {
if (ibv_close_device(hca_ptr->ib_hca_handle))
return (dapl_convert_errno(errno, "ib_close_device"));