# HG changeset patch # User Timo Sirainen # Date 1138684002 -7200 # Node ID 5b2640d48aa2dfe267ab925caf7616542116d6b7 # Parent 7dc2460ff0b71b0717159d7a416ce75a2afddad4 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. diff -r 7dc2460ff0b7 -r 5b2640d48aa2 src/lib-sql/driver-pgsql.c --- 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);