]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
director: Avoid calling timeval_diff_msecs() with too great time difference
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 22 Jul 2021 11:29:24 +0000 (14:29 +0300)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Mon, 9 Aug 2021 15:53:56 +0000 (15:53 +0000)
Fixes assert-crash --with-devel-checks:
Panic: file time-util.c: line 76 (timeval_diff_msecs): assertion failed: (diff <= INT_MAX)

src/director/director-connection.c

index 72211bdb8b268851eed16d017dc3883acf426d2f..d563cda9c27495825973b01db599b14270ad102b 100644 (file)
@@ -188,9 +188,6 @@ director_cmd_error(struct director_connection *conn, const char *fmt, ...)
 static void
 director_connection_append_stats(struct director_connection *conn, string_t *str)
 {
-       int input_msecs = timeval_diff_msecs(&ioloop_timeval, &conn->last_input);
-       int output_msecs = timeval_diff_msecs(&ioloop_timeval, &conn->last_output);
-       int connected_msecs = timeval_diff_msecs(&ioloop_timeval, &conn->connected_time);
        struct rusage usage;
 
        str_printfa(str, "bytes in=%"PRIuUOFF_T", bytes out=%"PRIuUOFF_T,
@@ -202,14 +199,20 @@ director_connection_append_stats(struct director_connection *conn, string_t *str
                            conn->handshake_users_sent);
        }
        if (conn->last_input.tv_sec > 0) {
+               int input_msecs = timeval_diff_msecs(&ioloop_timeval,
+                                                    &conn->last_input);
                str_printfa(str, ", last input %u.%03u s ago",
                            input_msecs/1000, input_msecs%1000);
        }
        if (conn->last_output.tv_sec > 0) {
+               int output_msecs = timeval_diff_msecs(&ioloop_timeval,
+                                                     &conn->last_output);
                str_printfa(str, ", last output %u.%03u s ago",
                            output_msecs/1000, output_msecs%1000);
        }
        if (conn->connected) {
+               int connected_msecs = timeval_diff_msecs(&ioloop_timeval,
+                                                        &conn->connected_time);
                str_printfa(str, ", connected %u.%03u s ago",
                            connected_msecs/1000, connected_msecs%1000);
        }