changeset 3965:5b2640d48aa2 HEAD

Make sure queued queries and timeout get freed when deinitializing. Send the first query immediately after connected to pgsql instead of waiting for 5 seconds.
author Timo Sirainen <tss@iki.fi>
date Tue, 31 Jan 2006 07:06:42 +0200
parents 7dc2460ff0b7
children 19dcfd289610
files src/lib-sql/driver-pgsql.c
diffstat 1 files changed, 16 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-sql/driver-pgsql.c	Sun Jan 29 14:42:45 2006 +0200
+++ b/src/lib-sql/driver-pgsql.c	Tue Jan 31 07:06:42 2006 +0200
@@ -70,6 +70,7 @@
 extern struct sql_result driver_pgsql_result;
 
 static void queue_send_next(struct pgsql_db *db);
+static void result_finish(struct pgsql_result *result);
 
 static void driver_pgsql_close(struct pgsql_db *db)
 {
@@ -135,6 +136,9 @@
 			io_add(PQsocket(db->pg), io_dir, connect_callback, db);
 		db->io_dir = io_dir;
 	}
+
+	if (db->connected && db->queue != NULL)
+		queue_send_next(db);
 }
 
 static int driver_pgsql_connect(struct sql_db *_db)
@@ -184,6 +188,18 @@
 {
 	struct pgsql_db *db = (struct pgsql_db *)_db;
 
+	while (db->queue != NULL) {
+		struct pgsql_queue *next = db->queue->next;
+
+                result_finish(db->queue->result);
+		i_free(db->queue->query);
+		i_free(db->queue);
+
+		db->queue = next;
+	}
+
+	if (db->queue_to != 0)
+		timeout_remove(&db->queue_to);
         driver_pgsql_close(db);
 	i_free(db->error);
 	i_free(db);