From: Timo Sirainen Date: Mon, 12 Jan 2009 17:05:58 +0000 (-0500) Subject: pgsql: If query fails because connection gets closed, return a proper error message. X-Git-Tag: 1.2.beta1~128 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9672bb2a11c37c275d695451accd824da5c9e485;p=thirdparty%2Fdovecot%2Fcore.git pgsql: If query fails because connection gets closed, return a proper error message. --HG-- branch : HEAD --- diff --git a/src/lib-sql/driver-pgsql.c b/src/lib-sql/driver-pgsql.c index e31b7979b2..ce5ab1ad4d 100644 --- a/src/lib-sql/driver-pgsql.c +++ b/src/lib-sql/driver-pgsql.c @@ -776,16 +776,21 @@ static const char *driver_pgsql_result_get_error(struct sql_result *_result) const char *msg; size_t len; - msg = PQresultErrorMessage(result->pgres); - if (msg == NULL) - return "(no error set)"; + i_free_and_null(db->error); - /* 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); + 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; }