]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-master: master-login-auth - Perform timeout manipulations in milliseconds.
authorStephan Bosch <stephan.bosch@dovecot.fi>
Sun, 27 Jan 2019 12:49:29 +0000 (13:49 +0100)
committerStephan Bosch <stephan.bosch@dovecot.fi>
Fri, 1 Feb 2019 18:36:44 +0000 (19:36 +0100)
src/lib-master/master-login-auth.c

index fc1df93fdaae51944b3e2e24c7704030edbdda10..897cdb68ef704e698c48733625124e71c94d75e0 100644 (file)
@@ -164,13 +164,16 @@ void master_login_auth_deinit(struct master_login_auth **_auth)
        master_login_auth_unref(&auth);
 }
 
-static unsigned int auth_get_next_timeout_secs(struct master_login_auth *auth)
+static unsigned int auth_get_next_timeout_msecs(struct master_login_auth *auth)
 {
-       time_t expires;
+       struct timeval expires;
+       int diff;
 
-       expires = auth->request_head->create_stamp.tv_sec +
-               MASTER_AUTH_LOOKUP_TIMEOUT_SECS;
-       return expires <= ioloop_time ? 0 : expires - ioloop_time;
+       expires = auth->request_head->create_stamp;
+       timeval_add_msecs(&expires, 1000 * MASTER_AUTH_LOOKUP_TIMEOUT_SECS);
+
+       diff = timeval_diff_msecs(&expires, &ioloop_timeval);
+       return (diff <= 0 ? 0 : (unsigned int)diff);
 }
 
 static void master_login_auth_timeout(struct master_login_auth *auth)
@@ -179,15 +182,19 @@ static void master_login_auth_timeout(struct master_login_auth *auth)
        const char *reason;
 
        while (auth->request_head != NULL &&
-              auth_get_next_timeout_secs(auth) == 0) {
+              auth_get_next_timeout_msecs(auth) == 0) {
+               int msecs;
+
                request = auth->request_head;
                DLLIST2_REMOVE(&auth->request_head,
                               &auth->request_tail, request);
                hash_table_remove(auth->requests, POINTER_CAST(request->id));
 
+               msecs = timeval_diff_msecs(&ioloop_timeval,
+                                          &request->create_stamp);
                reason = t_strdup_printf(
-                       "Auth server request timed out after %u secs",
-                       (unsigned int)(ioloop_time - request->create_stamp.tv_sec));
+                       "Auth server request timed out after %u.%03u secs",
+                       msecs/1000, msecs%1000);
                request_internal_failure(auth, request, reason);
                i_free(request);
        }
@@ -200,7 +207,7 @@ static void master_login_auth_update_timeout(struct master_login_auth *auth)
        i_assert(auth->to == NULL);
 
        if (auth->request_head != NULL) {
-               auth->to = timeout_add(auth_get_next_timeout_secs(auth) * 1000,
+               auth->to = timeout_add(auth_get_next_timeout_msecs(auth),
                                       master_login_auth_timeout, auth);
        }
 }