From 9d849f5446a28de3ecd5bcf1f57b60f5a8b3be1f Mon Sep 17 00:00:00 2001 From: Jonathan Rose Date: Wed, 15 Jun 2011 16:09:24 +0000 Subject: [PATCH] Adds PQclear calls on result to various parts of res_conf_pgsql (closes issue ASTERISK-17812) Reported by: byronclark Patches: pgsql_pqclear.patch uploaded by byronclark (license 1200) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@323610 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- res/res_config_pgsql.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/res/res_config_pgsql.c b/res/res_config_pgsql.c index b4398e8c90..a706bf9dca 100644 --- a/res/res_config_pgsql.c +++ b/res/res_config_pgsql.c @@ -221,6 +221,7 @@ static struct tables *find_table(const char *orig_tablename) if (!(table = ast_calloc(1, sizeof(*table) + strlen(orig_tablename) + 1))) { ast_log(LOG_ERROR, "Unable to allocate memory for new table structure\n"); + PQclear(result); AST_LIST_UNLOCK(&psql_tables); return NULL; } @@ -239,6 +240,7 @@ static struct tables *find_table(const char *orig_tablename) if (!(column = ast_calloc(1, sizeof(*column) + strlen(fname) + strlen(ftype) + 2))) { ast_log(LOG_ERROR, "Unable to allocate column element for %s, %s\n", orig_tablename, fname); + PQclear(result); destroy_table(table); AST_LIST_UNLOCK(&psql_tables); return NULL; @@ -363,6 +365,7 @@ static struct ast_variable *realtime_pgsql(const char *database, const char *tab "PostgreSQL RealTime: Failed to query '%s@%s'. Check debug for more info.\n", tablename, database); ast_debug(1, "PostgreSQL RealTime: Query: %s\n", ast_str_buffer(sql)); ast_debug(1, "PostgreSQL RealTime: Query Failed because: %s\n", PQerrorMessage(pgsqlConn)); + PQclear(result); ast_mutex_unlock(&pgsql_lock); return NULL; } else { @@ -391,8 +394,8 @@ static struct ast_variable *realtime_pgsql(const char *database, const char *tab ast_debug(1, "PostgreSQL RealTime: Found %d rows.\n", num_rows); if (!(fieldnames = ast_calloc(1, numFields * sizeof(char *)))) { - ast_mutex_unlock(&pgsql_lock); PQclear(result); + ast_mutex_unlock(&pgsql_lock); return NULL; } for (i = 0; i < numFields; i++) @@ -420,8 +423,8 @@ static struct ast_variable *realtime_pgsql(const char *database, const char *tab ast_debug(1, "Postgresql RealTime: Could not find any rows in table %s@%s.\n", tablename, database); } - ast_mutex_unlock(&pgsql_lock); PQclear(result); + ast_mutex_unlock(&pgsql_lock); return var; } @@ -530,6 +533,7 @@ static struct ast_config *realtime_multi_pgsql(const char *database, const char ast_debug(1, "PostgreSQL RealTime: Query: %s\n", ast_str_buffer(sql)); ast_debug(1, "PostgreSQL RealTime: Query Failed because: %s (%s)\n", PQresultErrorMessage(result), PQresStatus(result_status)); + PQclear(result); ast_mutex_unlock(&pgsql_lock); return NULL; } @@ -546,8 +550,8 @@ static struct ast_config *realtime_multi_pgsql(const char *database, const char ast_debug(1, "PostgreSQL RealTime: Found %d rows.\n", num_rows); if (!(fieldnames = ast_calloc(1, numFields * sizeof(char *)))) { - ast_mutex_unlock(&pgsql_lock); PQclear(result); + ast_mutex_unlock(&pgsql_lock); return NULL; } for (i = 0; i < numFields; i++) @@ -577,8 +581,8 @@ static struct ast_config *realtime_multi_pgsql(const char *database, const char ast_debug(1, "PostgreSQL RealTime: Could not find any rows in table %s.\n", table); } - ast_mutex_unlock(&pgsql_lock); PQclear(result); + ast_mutex_unlock(&pgsql_lock); return cfg; } @@ -699,6 +703,7 @@ static int update_pgsql(const char *database, const char *tablename, const char ast_debug(1, "PostgreSQL RealTime: Query: %s\n", ast_str_buffer(sql)); ast_debug(1, "PostgreSQL RealTime: Query Failed because: %s (%s)\n", PQresultErrorMessage(result), PQresStatus(result_status)); + PQclear(result); ast_mutex_unlock(&pgsql_lock); return -1; } @@ -929,6 +934,7 @@ static int store_pgsql(const char *database, const char *table, va_list ap) } insertid = PQoidValue(result); + PQclear(result); ast_mutex_unlock(&pgsql_lock); ast_debug(1, "PostgreSQL RealTime: row inserted on table: %s, id: %u\n", table, insertid);