Mercurial > dovecot > core-2.2
comparison src/director/director-connection.c @ 16618:0ad8da149774
director: Log director disconnection errno correctly.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 29 Jul 2013 22:10:01 +0300 |
parents | 36ef72481934 |
children | 9b8b5ce6ecb0 |
comparison
equal
deleted
inserted
replaced
16617:0e0eb964685a | 16618:0ad8da149774 |
---|---|
122 }; | 122 }; |
123 | 123 |
124 static void director_connection_disconnected(struct director_connection **conn); | 124 static void director_connection_disconnected(struct director_connection **conn); |
125 static void director_connection_reconnect(struct director_connection **conn, | 125 static void director_connection_reconnect(struct director_connection **conn, |
126 const char *reason); | 126 const char *reason); |
127 static void director_connection_log_disconnect(struct director_connection *conn); | 127 static void |
128 director_connection_log_disconnect(struct director_connection *conn, int err); | |
128 | 129 |
129 static void ATTR_FORMAT(2, 3) | 130 static void ATTR_FORMAT(2, 3) |
130 director_cmd_error(struct director_connection *conn, const char *fmt, ...) | 131 director_cmd_error(struct director_connection *conn, const char *fmt, ...) |
131 { | 132 { |
132 va_list args; | 133 va_list args; |
173 conn->to_ping = timeout_add(msecs, director_connection_ping, conn); | 174 conn->to_ping = timeout_add(msecs, director_connection_ping, conn); |
174 } | 175 } |
175 | 176 |
176 static void director_connection_wait_timeout(struct director_connection *conn) | 177 static void director_connection_wait_timeout(struct director_connection *conn) |
177 { | 178 { |
178 director_connection_log_disconnect(conn); | 179 director_connection_log_disconnect(conn, ETIMEDOUT); |
179 director_connection_deinit(&conn, | 180 director_connection_deinit(&conn, |
180 "Timeout waiting for disconnect after CONNECT"); | 181 "Timeout waiting for disconnect after CONNECT"); |
181 } | 182 } |
182 | 183 |
183 static void director_connection_send_connect(struct director_connection *conn, | 184 static void director_connection_send_connect(struct director_connection *conn, |
1269 conn->cur_line = NULL; | 1270 conn->cur_line = NULL; |
1270 return ret; | 1271 return ret; |
1271 } | 1272 } |
1272 | 1273 |
1273 static void | 1274 static void |
1274 director_connection_log_disconnect(struct director_connection *conn) | 1275 director_connection_log_disconnect(struct director_connection *conn, int err) |
1275 { | 1276 { |
1276 unsigned int secs = ioloop_time - conn->created; | 1277 unsigned int secs = ioloop_time - conn->created; |
1277 string_t *str = t_str_new(128); | 1278 string_t *str = t_str_new(128); |
1278 | 1279 |
1279 i_assert(conn->connected); | 1280 i_assert(conn->connected); |
1285 return; | 1286 return; |
1286 } | 1287 } |
1287 | 1288 |
1288 str_printfa(str, "Director %s disconnected: ", conn->name); | 1289 str_printfa(str, "Director %s disconnected: ", conn->name); |
1289 str_append(str, "Connection closed"); | 1290 str_append(str, "Connection closed"); |
1290 if (errno != 0 && errno != EPIPE) | 1291 if (err != 0 && err != EPIPE) { |
1292 errno = err; | |
1291 str_printfa(str, ": %m"); | 1293 str_printfa(str, ": %m"); |
1294 } | |
1292 | 1295 |
1293 str_printfa(str, " (connected %u secs, " | 1296 str_printfa(str, " (connected %u secs, " |
1294 "in=%"PRIuUOFF_T" out=%"PRIuUOFF_T, | 1297 "in=%"PRIuUOFF_T" out=%"PRIuUOFF_T, |
1295 secs, conn->input->v_offset, conn->output->offset); | 1298 secs, conn->input->v_offset, conn->output->offset); |
1296 | 1299 |
1310 switch (i_stream_read(conn->input)) { | 1313 switch (i_stream_read(conn->input)) { |
1311 case 0: | 1314 case 0: |
1312 return; | 1315 return; |
1313 case -1: | 1316 case -1: |
1314 /* disconnected */ | 1317 /* disconnected */ |
1315 director_connection_log_disconnect(conn); | 1318 director_connection_log_disconnect(conn, conn->input->stream_errno); |
1316 director_connection_disconnected(&conn); | 1319 director_connection_disconnected(&conn); |
1317 return; | 1320 return; |
1318 case -2: | 1321 case -2: |
1319 /* buffer full */ | 1322 /* buffer full */ |
1320 director_cmd_error(conn, "Director sent us more than %d bytes", | 1323 director_cmd_error(conn, "Director sent us more than %d bytes", |