Mercurial > dovecot > original-hg > dovecot-1.2
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);