From: Stephan Bosch Date: Sun, 27 Jan 2019 12:49:29 +0000 (+0100) Subject: lib-master: master-login-auth - Perform timeout manipulations in milliseconds. X-Git-Tag: 2.3.9~873 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a27f66b9cdd7acdb3130bfeff86f2a87fa9a7a36;p=thirdparty%2Fdovecot%2Fcore.git lib-master: master-login-auth - Perform timeout manipulations in milliseconds. --- diff --git a/src/lib-master/master-login-auth.c b/src/lib-master/master-login-auth.c index fc1df93fda..897cdb68ef 100644 --- a/src/lib-master/master-login-auth.c +++ b/src/lib-master/master-login-auth.c @@ -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); } }