fixes pgsql double free of threadstorage
authorDavid Vossel <dvossel@digium.com>
Tue, 10 Nov 2009 15:27:45 +0000 (15:27 +0000)
committerDavid Vossel <dvossel@digium.com>
Tue, 10 Nov 2009 15:27:45 +0000 (15:27 +0000)
A thread storage variable was being freed incorrectly, which
resulted in a double free if two queries were made in the same thread.

(closes issue #16011)
Reported by: cristiandimache
Patches:
      issue16011.diff uploaded by dvossel (license 671)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@229093 65c4cc65-6c06-0410-ace0-fbb531ad65f3

res/res_config_pgsql.c

index 5622d67..e4bffd3 100644 (file)
@@ -678,7 +678,6 @@ 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\n", PQerrorMessage(pgsqlConn));
                ast_mutex_unlock(&pgsql_lock);
-               ast_free(sql);
                return -1;
        } else {
                ExecStatusType result_status = PQresultStatus(result);
@@ -691,14 +690,12 @@ static int update_pgsql(const char *database, const char *tablename, const char
                        ast_debug(1, "PostgreSQL RealTime: Query Failed because: %s (%s)\n",
                                                PQresultErrorMessage(result), PQresStatus(result_status));
                        ast_mutex_unlock(&pgsql_lock);
-                       ast_free(sql);
                        return -1;
                }
        }
 
        numrows = atoi(PQcmdTuples(result));
        ast_mutex_unlock(&pgsql_lock);
-       ast_free(sql);
 
        ast_debug(1, "PostgreSQL RealTime: Updated %d rows on table: %s\n", numrows, tablename);