changeset 22969:3e71d3877872

lib-master: Use more exact timestamp in master_login_auth_request failures
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Fri, 04 May 2018 14:03:46 +0300
parents 304c434e382f
children 813522f36bff
files src/lib-master/master-login-auth.c
diffstat 1 files changed, 9 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-master/master-login-auth.c	Fri May 04 13:56:45 2018 +0300
+++ b/src/lib-master/master-login-auth.c	Fri May 04 14:03:46 2018 +0300
@@ -11,6 +11,7 @@
 #include "hash.h"
 #include "str.h"
 #include "strescape.h"
+#include "time-util.h"
 #include "master-interface.h"
 #include "master-service.h"
 #include "master-auth.h"
@@ -23,7 +24,7 @@
 	struct master_login_auth_request *prev, *next;
 
 	unsigned int id;
-	time_t create_stamp;
+	struct timeval create_stamp;
 
 	pid_t auth_pid;
 	unsigned int auth_id;
@@ -149,7 +150,7 @@
 {
 	time_t expires;
 
-	expires = auth->request_head->create_stamp +
+	expires = auth->request_head->create_stamp.tv_sec +
 		MASTER_AUTH_LOOKUP_TIMEOUT_SECS;
 	return expires <= ioloop_time ? 0 : expires - ioloop_time;
 }
@@ -168,7 +169,7 @@
 
 		reason = t_strdup_printf(
 			"Auth server request timed out after %u secs",
-			(unsigned int)(ioloop_time - request->create_stamp));
+			(unsigned int)(ioloop_time - request->create_stamp.tv_sec));
 		request_internal_failure(request, reason);
 		i_free(request);
 	}
@@ -296,9 +297,10 @@
 						 "Internal auth failure");
 		} else {
 			i_error("Internal auth failure: %s "
-				"(Request took %ld secs, "
+				"(Request took %u msecs, "
 				"client-pid=%u client-id=%u)",
-				error, (long)(ioloop_time - request->create_stamp),
+				error, timeval_diff_msecs(&ioloop_timeval,
+							  &request->create_stamp),
 				request->client_pid, request->auth_id);
 			request->callback(NULL, error, request->context);
 		}
@@ -478,8 +480,9 @@
 	if (id == 0)
 		id++;
 
+	io_loop_time_refresh();
 	login_req = i_new(struct master_login_auth_request, 1);
-	login_req->create_stamp = ioloop_time;
+	login_req->create_stamp = ioloop_timeval;
 	login_req->id = id;
 	login_req->auth_pid = req->auth_pid;
 	login_req->client_pid = req->client_pid;