]> git.openfabrics.org - ~ardavis/dapl.git/commitdiff
Cleanup CM object lock before freeing CM object memory
authorArlin Davis <arlin.r.davis@intel.com>
Fri, 5 Feb 2010 19:39:21 +0000 (11:39 -0800)
committerArlin Davis <arlin.r.davis@intel.com>
Fri, 5 Feb 2010 19:39:21 +0000 (11:39 -0800)
Running windows application verifiier for uDAPL validation
for all 3 providers. Cleanup memory lock leaks found
by verifier.

Signed-off-by: Arlin Davis <arlin.r.davis@intel.com>
dapl/openib_cma/cm.c
dapl/openib_scm/cm.c
dapl/openib_ucm/cm.c

index 9928239829cea1cba46bfbbbe2b2bed7afb23bff..cfa6edebe479ac89943935d1bca4242f5a811552 100644 (file)
@@ -167,6 +167,7 @@ dp_ib_cm_handle_t dapls_ib_cm_create(DAPL_EP *ep)
 
        /* create CM_ID, bind to local device, create QP */
        if (rdma_create_id(g_cm_events, &cm_id, (void *)conn, RDMA_PS_TCP)) {
+               dapl_os_lock_destroy(&conn->lock);
                dapl_os_free(conn, sizeof(*conn));
                return NULL;
        }
@@ -221,6 +222,7 @@ void dapls_ib_cm_free(dp_ib_cm_handle_t conn, DAPL_EP *ep)
                rdma_destroy_id(conn->cm_id);
        }
 
+       dapl_os_lock_destroy(&conn->lock);
        dapl_os_free(conn, sizeof(*conn));
 }
 
@@ -686,6 +688,7 @@ dapls_ib_setup_conn_listener(IN DAPL_IA * ia_ptr,
        /* create CM_ID, bind to local device, create QP */
        if (rdma_create_id
            (g_cm_events, &conn->cm_id, (void *)conn, RDMA_PS_TCP)) {
+               dapl_os_lock_destroy(&conn->lock);
                dapl_os_free(conn, sizeof(*conn));
                return (dapl_convert_errno(errno, "setup_listener"));
        }
@@ -734,6 +737,7 @@ dapls_ib_setup_conn_listener(IN DAPL_IA * ia_ptr,
 
       bail:
        rdma_destroy_id(conn->cm_id);
+       dapl_os_lock_destroy(&conn->lock);
        dapl_os_free(conn, sizeof(*conn));
        return dat_status;
 }
index db2821a5c0228f1db79282c9d390c608925d8af0..8e9be4ddc792aae46190775713ce9dae017d68f2 100644 (file)
@@ -317,6 +317,7 @@ void dapls_ib_cm_free(dp_ib_cm_handle_t cm_ptr, DAPL_EP *ep)
                        closesocket(cm_ptr->socket);
                }
                dapl_os_unlock(&cm_ptr->lock);
+               dapl_os_lock_destroy(&cm_ptr->lock);
                dapl_os_free(cm_ptr, sizeof(*cm_ptr));
                return;
        }
@@ -1761,6 +1762,7 @@ void cr_thread(void *arg)
                                        shutdown(cr->socket, SHUT_RDWR);
                                        closesocket(cr->socket);
                                }
+                               dapl_os_lock_destroy(&cr->lock);
                                dapl_os_free(cr, sizeof(*cr));
                                continue;
                        }
index b5aba64046e92e450e68f40c45ab694b671c0e74..c0da589ba2ece2baa6ff9bb064013c5434501456 100644 (file)
@@ -728,6 +728,7 @@ void dapls_ib_cm_free(dp_ib_cm_handle_t cm, DAPL_EP *ep)
        /* cleanup, never made it to work queue */
        if (cm->state == DCM_INIT) {
                dapl_os_unlock(&cm->lock);
+               dapl_os_lock_destroy(&cm->lock);
                dapl_os_free(cm, sizeof(*cm));
                return;
        }
@@ -1701,6 +1702,7 @@ dapls_ib_remove_conn_listener(IN DAPL_IA *ia, IN DAPL_SP *sp)
                cm->state = DCM_DESTROY;
                dapl_os_unlock(&cm->lock);
                ucm_dequeue_listen(cm);
+               dapl_os_lock_destroy(&cm->lock);
                dapl_os_free(cm, sizeof(*cm));
        }
        return DAT_SUCCESS;
@@ -1981,6 +1983,7 @@ void cm_thread(void *arg)
                                dapl_llist_remove_entry(&hca->ib_trans.list,
                                                        (DAPL_LLIST_ENTRY *)&cm->entry);
                                dapl_os_unlock(&cm->lock);
+                               dapl_os_lock_destroy(&cm->lock);
                                dapl_os_free(cm, sizeof(*cm));
                                continue;
                        }
@@ -2052,6 +2055,7 @@ void cm_thread(void *arg)
                                        &hca->ib_trans.list,
                                        (DAPL_LLIST_ENTRY *)&cm->entry);
                                dapl_os_unlock(&cm->lock);
+                               dapl_os_lock_destroy(&cm->lock);
                                dapl_os_free(cm, sizeof(*cm));
                                continue;
                        }