dovecot-1.2: pgsql: If query fails because connection gets close...

dovecot at dovecot.org dovecot at dovecot.org
Mon Jan 12 20:26:39 EET 2009


details:   http://hg.dovecot.org/dovecot-1.2/rev/57b00471cdc6
changeset: 8615:57b00471cdc6
user:      Timo Sirainen <tss at iki.fi>
date:      Mon Jan 12 12:05:58 2009 -0500
description:
pgsql: If query fails because connection gets closed, return a proper error message.

diffstat:

1 file changed, 15 insertions(+), 10 deletions(-)
src/lib-sql/driver-pgsql.c |   25 +++++++++++++++----------

diffs (35 lines):

diff -r fc3bd6608c90 -r 57b00471cdc6 src/lib-sql/driver-pgsql.c
--- a/src/lib-sql/driver-pgsql.c	Mon Jan 12 12:05:19 2009 -0500
+++ b/src/lib-sql/driver-pgsql.c	Mon Jan 12 12:05:58 2009 -0500
@@ -776,16 +776,21 @@ static const char *driver_pgsql_result_g
 	const char *msg;
 	size_t len;
 
-	msg = PQresultErrorMessage(result->pgres);
-	if (msg == NULL)
-		return "(no error set)";
-
-	/* Error message should contain trailing \n, we don't want it */
-	len = strlen(msg);
-	i_free(db->error);
-	db->error = len == 0 || msg[len-1] != '\n' ?
-		i_strdup(msg) : i_strndup(msg, len-1);
-
+	i_free_and_null(db->error);
+
+	if (result->pgres == NULL) {
+		/* connection error */
+		db->error = i_strdup(last_error(db));
+	} else {
+		msg = PQresultErrorMessage(result->pgres);
+		if (msg == NULL)
+			return "(no error set)";
+
+		/* Error message should contain trailing \n, we don't want it */
+		len = strlen(msg);
+		db->error = len == 0 || msg[len-1] != '\n' ?
+			i_strdup(msg) : i_strndup(msg, len-1);
+	}
 	return db->error;
 }
 


More information about the dovecot-cvs mailing list