]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
director: Log director disconnection errno correctly.
authorTimo Sirainen <tss@iki.fi>
Mon, 29 Jul 2013 19:10:01 +0000 (22:10 +0300)
committerTimo Sirainen <tss@iki.fi>
Mon, 29 Jul 2013 19:10:01 +0000 (22:10 +0300)
src/director/director-connection.c

index f00955c27041a1bb428c5f44276225fe89193b16..26fb88ca6a59d8521627fbfa8b92a178d9365239 100644 (file)
@@ -124,7 +124,8 @@ struct director_connection {
 static void director_connection_disconnected(struct director_connection **conn);
 static void director_connection_reconnect(struct director_connection **conn,
                                          const char *reason);
-static void director_connection_log_disconnect(struct director_connection *conn);
+static void
+director_connection_log_disconnect(struct director_connection *conn, int err);
 
 static void ATTR_FORMAT(2, 3)
 director_cmd_error(struct director_connection *conn, const char *fmt, ...)
@@ -175,7 +176,7 @@ director_connection_set_ping_timeout(struct director_connection *conn)
 
 static void director_connection_wait_timeout(struct director_connection *conn)
 {
-       director_connection_log_disconnect(conn);
+       director_connection_log_disconnect(conn, ETIMEDOUT);
        director_connection_deinit(&conn,
                "Timeout waiting for disconnect after CONNECT");
 }
@@ -1271,7 +1272,7 @@ director_connection_handle_line(struct director_connection *conn,
 }
 
 static void
-director_connection_log_disconnect(struct director_connection *conn)
+director_connection_log_disconnect(struct director_connection *conn, int err)
 {
        unsigned int secs = ioloop_time - conn->created;
        string_t *str = t_str_new(128);
@@ -1287,8 +1288,10 @@ director_connection_log_disconnect(struct director_connection *conn)
 
        str_printfa(str, "Director %s disconnected: ", conn->name);
        str_append(str, "Connection closed");
-       if (errno != 0 && errno != EPIPE)
+       if (err != 0 && err != EPIPE) {
+               errno = err;
                str_printfa(str, ": %m");
+       }
 
        str_printfa(str, " (connected %u secs, "
                    "in=%"PRIuUOFF_T" out=%"PRIuUOFF_T,
@@ -1312,7 +1315,7 @@ static void director_connection_input(struct director_connection *conn)
                return;
        case -1:
                /* disconnected */
-               director_connection_log_disconnect(conn);
+               director_connection_log_disconnect(conn, conn->input->stream_errno);
                director_connection_disconnected(&conn);
                return;
        case -2: