From 77f52081ffb6909db2bb6f59b57c2ecb400dbbbe Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Mon, 28 Feb 2011 11:15:12 -0600 Subject: [PATCH] fix memory leak introduced in d8facbcf716612e826d451f4b5c3bcd938c46a3b --- src/mod/applications/mod_lcr/mod_lcr.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/mod/applications/mod_lcr/mod_lcr.c b/src/mod/applications/mod_lcr/mod_lcr.c index 2f2bc7d421..593117942a 100644 --- a/src/mod/applications/mod_lcr/mod_lcr.c +++ b/src/mod/applications/mod_lcr/mod_lcr.c @@ -595,11 +595,12 @@ static int route_add_callback(void *pArg, int argc, char **argv, char **columnNa callback_t *cbt = (callback_t *) pArg; char *key = NULL; int i = 0; + int r = 0; switch_memory_pool_t *pool = cbt->pool; additional = switch_core_alloc(pool, sizeof(lcr_obj_t)); - additional->fields = switch_core_alloc(pool, sizeof(switch_event_t)); + switch_event_create(&additional->fields, SWITCH_EVENT_REQUEST_PARAMS); for (i = 0; i < argc ; i++) { if (CF("lcr_digits")) { @@ -652,9 +653,9 @@ static int route_add_callback(void *pArg, int argc, char **argv, char **columnNa switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Adding %s to head of list\n", additional->carrier_name); if (switch_core_hash_insert(cbt->dedup_hash, key, additional) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error inserting into dedup hash\n"); - return SWITCH_STATUS_GENERR; + r = -1; goto end; } - return SWITCH_STATUS_SUCCESS; + r = 0; goto end; } @@ -676,7 +677,7 @@ static int route_add_callback(void *pArg, int argc, char **argv, char **columnNa additional->prev = current; if (switch_core_hash_insert(cbt->dedup_hash, key, additional) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error inserting into dedup hash\n"); - return SWITCH_STATUS_GENERR; + r = -1; goto end; } break; } @@ -697,7 +698,7 @@ static int route_add_callback(void *pArg, int argc, char **argv, char **columnNa current->prev = additional; if (switch_core_hash_insert(cbt->dedup_hash, key, additional) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error inserting into dedup hash\n"); - return SWITCH_STATUS_GENERR; + r = -1; goto end; } break; } else if (current->next == NULL) { @@ -707,13 +708,19 @@ static int route_add_callback(void *pArg, int argc, char **argv, char **columnNa additional->prev = current; if (switch_core_hash_insert(cbt->dedup_hash, key, additional) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error inserting into dedup hash\n"); - return SWITCH_STATUS_GENERR; + r = -1; goto end; } break; } } } - return SWITCH_STATUS_SUCCESS; + + end: + + switch_event_destroy(&additional->fields); + + return r; + } static int intrastatelata_callback(void *pArg, int argc, char **argv, char **columnNames)