From e6daafb8a60b6018f0ded063fa26ba2b3e336b0b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?=
 <decipher.hk@gmail.com>
Date: Fri, 1 May 2015 13:22:17 -0400
Subject: [PATCH] cdr_pgsql, cel_pgsql: Store maximum buffer size to prevent
 reallocation

The code previously used a fixed size of 512 for the SQL
queries. Depending on the size this may require it to grow.

This change makes it so if the buffer size does grow the size
is stored and next time the buffer will be large enough.

Change-Id: I55385899f1c06dee47e4274c2d21538037b2d895
---
 cdr/cdr_pgsql.c | 10 ++++++++++
 cel/cel_pgsql.c |  9 +++++++++
 2 files changed, 19 insertions(+)

diff --git a/cdr/cdr_pgsql.c b/cdr/cdr_pgsql.c
index 310411cd36..1941205646 100644
--- a/cdr/cdr_pgsql.c
+++ b/cdr/cdr_pgsql.c
@@ -75,6 +75,7 @@ static char *encoding;
 static char *tz;
 
 static int connected = 0;
+/* Optimization to reduce number of memory allocations */
 static int maxsize = 512, maxsize2 = 512;
 static time_t connect_time = 0;
 static int totalrecords = 0;
@@ -453,6 +454,15 @@ static int pgsql_log(struct ast_cdr *cdr)
 			records++;
 		}
 		PQclear(result);
+
+		/* Next time, just allocate buffers that are that big to start with. */
+		if (ast_str_strlen(sql) > maxsize) {
+			maxsize = ast_str_strlen(sql);
+		}
+		if (ast_str_strlen(sql2) > maxsize2) {
+			maxsize2 = ast_str_strlen(sql2);
+		}
+
 		ast_free(sql);
 		ast_free(sql2);
 	}
diff --git a/cel/cel_pgsql.c b/cel/cel_pgsql.c
index 2d7f0dfb04..c5c4fa92bd 100644
--- a/cel/cel_pgsql.c
+++ b/cel/cel_pgsql.c
@@ -71,6 +71,7 @@ static char *pgdbport;
 static char *table;
 
 static int connected = 0;
+/* Optimization to reduce number of memory allocations */
 static int maxsize = 512, maxsize2 = 512;
 static int usegmtime = 0;
 
@@ -372,6 +373,14 @@ static void pgsql_log(struct ast_event *event)
 		}
 		PQclear(result);
 
+		/* Next time, just allocate buffers that are that big to start with. */
+		if (ast_str_strlen(sql) > maxsize) {
+			maxsize = ast_str_strlen(sql);
+		}
+		if (ast_str_strlen(sql2) > maxsize2) {
+			maxsize2 = ast_str_strlen(sql2);
+		}
+
 ast_log_cleanup:
 		ast_free(sql);
 		ast_free(sql2);
-- 
GitLab