Module: sip-router Branch: master Commit: d934a2acd31408ae6afdf31007f2ebe4527d1f3d URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=d934a2ac...
Author: Peter Dunkley peter.dunkley@crocodile-rcs.com Committer: Peter Dunkley peter.dunkley@crocodile-rcs.com Date: Sun Jan 20 14:23:17 2013 +0000
modules/db_postgres: Fixes
- Fixed submit_query() retry mechanism - connection errors now detected and retried. - Fixed memory leak when raw queries contain > 1 SQL command. - Fixes by Hugh Waite @ Crocodile RCS
---
modules/db_postgres/km_dbase.c | 26 +++++++------------------- 1 files changed, 7 insertions(+), 19 deletions(-)
diff --git a/modules/db_postgres/km_dbase.c b/modules/db_postgres/km_dbase.c index bf393ed..21c9cea 100644 --- a/modules/db_postgres/km_dbase.c +++ b/modules/db_postgres/km_dbase.c @@ -166,6 +166,7 @@ static int db_postgres_submit_query(const db1_con_t* _con, const str* _s) char *s=NULL; int i, retries; ExecStatusType pqresult; + PGresult *res = NULL;
if(! _con || !_s || !_s->s) { @@ -216,9 +217,14 @@ static int db_postgres_submit_query(const db1_con_t* _con, const str* _s) /* exec the query */
if (PQsendQuery(CON_CONNECTION(_con), s)) { + /* Get the result of the query */ + while ((res = PQgetResult(CON_CONNECTION(_con))) != NULL) { + db_postgres_free_query(_con); + CON_RESULT(_con) = res; + } pqresult = PQresultStatus(CON_RESULT(_con)); if((pqresult!=PGRES_FATAL_ERROR) - || (PQstatus(CON_CONNECTION(_con))==CONNECTION_OK)) + && (PQstatus(CON_CONNECTION(_con))==CONNECTION_OK)) { LM_DBG("sending query ok: %p (%d) - [%.*s]\n", _con, pqresult, _s->len, _s->s); @@ -262,7 +268,6 @@ static int db_postgres_submit_query(const db1_con_t* _con, const str* _s) int db_postgres_fetch_result(const db1_con_t* _con, db1_res_t** _res, const int nrows) { int rows; - PGresult *res = NULL; ExecStatusType pqresult;
if (!_con || !_res || nrows < 0) { @@ -283,14 +288,6 @@ int db_postgres_fetch_result(const db1_con_t* _con, db1_res_t** _res, const int /* Allocate a new result structure */ *_res = db_new_result();
- /* Get the result of the previous query */ - while (1) { - if ((res = PQgetResult(CON_CONNECTION(_con)))) { - CON_RESULT(_con) = res; - } else { - break; - } - } pqresult = PQresultStatus(CON_RESULT(_con)); LM_DBG("%p PQresultStatus(%s) PQgetResult(%p)\n", _con, PQresStatus(pqresult), CON_RESULT(_con)); @@ -496,7 +493,6 @@ int db_postgres_raw_query(const db1_con_t* _h, const str* _s, db1_res_t** _r) */ int db_postgres_store_result(const db1_con_t* _con, db1_res_t** _r) { - PGresult *res = NULL; ExecStatusType pqresult; int rc = 0;
@@ -507,14 +503,6 @@ int db_postgres_store_result(const db1_con_t* _con, db1_res_t** _r) goto done; }
- while (1) { - if ((res = PQgetResult(CON_CONNECTION(_con)))) { - CON_RESULT(_con) = res; - } else { - break; - } - } - pqresult = PQresultStatus(CON_RESULT(_con)); LM_DBG("%p PQresultStatus(%s) PQgetResult(%p)\n", _con,