From: Aki Tuomi Date: Thu, 29 Jun 2023 10:38:22 +0000 (+0300) Subject: lib-sql: pgsql - Retain last connection error X-Git-Tag: 2.4.0~2657 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b2069887f97bc523898fdf6d31af9f6faf3aa82c;p=thirdparty%2Fdovecot%2Fcore.git lib-sql: pgsql - Retain last connection error --- diff --git a/src/lib-sql/driver-pgsql.c b/src/lib-sql/driver-pgsql.c index 4fb38eeb6f..d868a89f94 100644 --- a/src/lib-sql/driver-pgsql.c +++ b/src/lib-sql/driver-pgsql.c @@ -198,6 +198,8 @@ static void connect_callback(struct pgsql_db *db) case PGRES_POLLING_FAILED: e_error(db->api.event, "Connect failed to database %s: %s (state: %s)", PQdb(db->pg), last_error(db), db->connect_state); + i_free(db->api.last_connect_error); + db->api.last_connect_error = i_strdup(last_error(db)); driver_pgsql_close(db); return; } @@ -226,9 +228,10 @@ static void connect_callback(struct pgsql_db *db) static void driver_pgsql_connect_timeout(struct pgsql_db *db) { unsigned int secs = ioloop_time - db->api.last_connect_try; - - e_error(db->api.event, "Connect failed: Timeout after %u seconds (state: %s)", - secs, db->connect_state); + i_free(db->api.last_connect_error); + db->api.last_connect_error = i_strdup_printf("Timeout after %u seconds (state: %s)", + secs, db->connect_state); + e_error(db->api.event, "Connect failed: %s", db->api.last_connect_error); driver_pgsql_close(db); } @@ -253,6 +256,8 @@ static int driver_pgsql_connect(struct sql_db *_db) if (PQstatus(db->pg) == CONNECTION_BAD) { e_error(_db->event, "Connect failed to database %s: %s", PQdb(db->pg), last_error(db)); + i_free(db->api.last_connect_error); + db->api.last_connect_error = i_strdup(last_error(db)); driver_pgsql_close(db); return -1; }