[ofa-general] [PATCH 5/6] [DAPL v2] fix memory leak in error path
Patrick Marchand Latifi
patrick.latifi at qlogic.com
Tue Feb 19 03:19:37 PST 2008
Make sure we don't leak the hash table if dapl_hca_alloc fails.
Signed-off-by: Patrick Marchand Latifi <patrick.latifi at qlogic.com>
---
dapl/common/dapl_hca_util.c | 54 ++++++++++++++++++++++++++-----------------
1 files changed, 33 insertions(+), 21 deletions(-)
diff --git a/dapl/common/dapl_hca_util.c b/dapl/common/dapl_hca_util.c
index 2cfef0e..f881a1e 100644
--- a/dapl/common/dapl_hca_util.c
+++ b/dapl/common/dapl_hca_util.c
@@ -65,33 +65,45 @@ dapl_hca_alloc (
DAPL_HCA *hca_ptr;
hca_ptr = dapl_os_alloc (sizeof (DAPL_HCA));
- if ( NULL != hca_ptr )
+ if ( NULL == hca_ptr )
{
- dapl_os_memzero (hca_ptr, sizeof (DAPL_HCA));
+ goto bail;
+ }
- if ( DAT_SUCCESS == dapls_hash_create (
- DAPL_HASH_TABLE_DEFAULT_CAPACITY, &hca_ptr->lmr_hash_table) )
- {
- dapl_os_lock_init(&hca_ptr->lock);
- dapl_llist_init_head(&hca_ptr->ia_list_head);
+ dapl_os_memzero (hca_ptr, sizeof (DAPL_HCA));
+
+ if ( DAT_SUCCESS != dapls_hash_create (
+ DAPL_HASH_TABLE_DEFAULT_CAPACITY, &hca_ptr->lmr_hash_table) )
+ {
+ goto bail;
+ }
+
+ dapl_os_lock_init(&hca_ptr->lock);
+ dapl_llist_init_head(&hca_ptr->ia_list_head);
- hca_ptr->name = dapl_os_strdup(name);
- hca_ptr->ib_hca_handle = IB_INVALID_HANDLE;
- hca_ptr->port_num = dapl_os_strtol(port, NULL, 0);
- if (hca_ptr->name == NULL)
- {
- dapl_os_free (hca_ptr, sizeof (DAPL_HCA));
- hca_ptr = NULL;
- }
- }
- else
- {
- dapl_os_free (hca_ptr, sizeof (DAPL_HCA));
- hca_ptr = NULL;
- }
+ hca_ptr->name = dapl_os_strdup(name);
+ if ( NULL == hca_ptr->name )
+ {
+ goto bail;
}
+ hca_ptr->ib_hca_handle = IB_INVALID_HANDLE;
+ hca_ptr->port_num = dapl_os_strtol(port, NULL, 0);
+
return (hca_ptr);
+
+bail:
+ if ( NULL != hca_ptr )
+ {
+ if ( NULL != hca_ptr->lmr_hash_table )
+ {
+ dapls_hash_free (hca_ptr->lmr_hash_table);
+ }
+
+ dapl_os_free (hca_ptr, sizeof (DAPL_HCA));
+ }
+
+ return NULL;
}
/*
More information about the general
mailing list