]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Two consecutive calls to PQfinish could occur, meaning free gets called on the same...
authorMark Michelson <mmichelson@digium.com>
Thu, 26 Jul 2007 18:30:29 +0000 (18:30 +0000)
committerMark Michelson <mmichelson@digium.com>
Thu, 26 Jul 2007 18:30:29 +0000 (18:30 +0000)
This patch sets the connection to NULL after calls to PQfinish so that the problem does not occur.
Also in this patch, prashant_jois informed me that it is safe to pass a null pointer to PQfinish, so
I have removed the check for conn's existence from my_unload_module.

(closes issue 10295, reported by junky, patched by me with input from prashant_jois)

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

cdr/cdr_pgsql.c

index 1521adaf0c37ced31d1b3a7e41afb8b5355f204c..7c2bc9355d28e4970b8cd2c00cfc1992999f44ff 100644 (file)
@@ -89,6 +89,7 @@ static int pgsql_log(struct ast_cdr *cdr)
                        PQfinish(conn);
                        ast_log(LOG_ERROR, "cdr_pgsql: Unable to connect to database server %s.  Calls will not be logged!\n", pghostname);
                        ast_log(LOG_ERROR, "cdr_pgsql: Reason: %s\n", pgerror);
+                       conn = NULL;
                }
        }
 
@@ -149,6 +150,7 @@ static int pgsql_log(struct ast_cdr *cdr)
                                PQfinish(conn);
                                ast_log(LOG_ERROR, "cdr_pgsql: Unable to reconnect to database server %s. Calls will not be logged!\n", pghostname);
                                ast_log(LOG_ERROR, "cdr_pgsql: Reason: %s\n", pgerror);
+                               conn = NULL;
                                connected = 0;
                                ast_mutex_unlock(&pgsql_lock);
                                return -1;
@@ -184,8 +186,7 @@ static int pgsql_log(struct ast_cdr *cdr)
 
 static int my_unload_module(void)
 { 
-       if (conn)
-               PQfinish(conn);
+       PQfinish(conn);
        if (pghostname)
                free(pghostname);
        if (pgdbname)