Mercurial > dovecot > core-2.2
changeset 20479:0fd0da4a3cfb
dict-client: When skipping connect() due to earlier failure, preserve the original error.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Fri, 01 Jul 2016 11:56:46 +0300 |
parents | 84191902a866 |
children | 4909fa3325e8 |
files | src/lib-dict/dict-client.c |
diffstat | 1 files changed, 11 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-dict/dict-client.c Fri Jul 01 11:41:51 2016 +0300 +++ b/src/lib-dict/dict-client.c Fri Jul 01 11:56:46 2016 +0300 @@ -61,6 +61,8 @@ enum dict_data_type value_type; time_t last_failed_connect; + char *last_connect_error; + struct ioloop *ioloop, *prev_ioloop; struct timeout *to_requests; struct timeout *to_idle; @@ -374,25 +376,28 @@ static int client_dict_connect(struct client_dict *dict, const char **error_r) { - const char *query; + const char *query, *error; if (dict->conn.conn.fd_in != -1) return 0; if (dict->last_failed_connect == ioloop_time) { /* Try again later */ - *error_r = "Waiting until the next connect attempt"; + *error_r = dict->last_connect_error; return -1; } if (connection_client_connect(&dict->conn.conn) < 0) { dict->last_failed_connect = ioloop_time; if (errno == EACCES) { - *error_r = eacces_error_get("net_connect_unix", - dict->conn.conn.name); + error = eacces_error_get("net_connect_unix", + dict->conn.conn.name); } else { - *error_r = t_strdup_printf( + error = t_strdup_printf( "net_connect_unix(%s) failed: %m", dict->conn.conn.name); } + i_free(dict->last_connect_error); + dict->last_connect_error = i_strdup(error); + *error_r = error; return -1; } @@ -540,6 +545,7 @@ io_loop_set_current(old_ioloop); array_free(&dict->cmds); + i_free(dict->last_connect_error); i_free(dict->username); i_free(dict->uri); i_free(dict);