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",