]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
cdr_pgsql, cel_pgsql: Store maximum buffer size to prevent reallocation 15/415/2
authorRodrigo Ramírez Norambuena <decipher.hk@gmail.com>
Fri, 1 May 2015 17:22:17 +0000 (13:22 -0400)
committerJoshua Colp <jcolp@digium.com>
Tue, 12 May 2015 10:11:39 +0000 (05:11 -0500)
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
cel/cel_pgsql.c

index 310411cd36e6e3d7775269deea2ac71f15254d8b..194120564651f3230e8f981835181ff3b9bbfc18 100644 (file)
@@ -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);
        }
index 2d7f0dfb04ceb5528468321fcdd453a44843ab00..c5c4fa92bd1a197cb0adb04d48685028706420c3 100644 (file)
@@ -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);