Mercurial > dovecot > original-hg > dovecot-1.2
changeset 8615:57b00471cdc6 HEAD
pgsql: If query fails because connection gets closed, return a proper error message.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 12 Jan 2009 12:05:58 -0500 |
parents | fc3bd6608c90 |
children | e50c8c44ab28 |
files | src/lib-sql/driver-pgsql.c |
diffstat | 1 files changed, 13 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- 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 @@ 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; }