BUG/MINOR: hlua: return wall-clock date, not internal date in core.now()

That's hopefully the last one affected by this. It was a bit trickier
because there's the promise in the doc that the date is monotonous, so
we continue to use now-start_time as the uptime value and add it to
start_date to get the current date. It was also emphasized by commit
28360dc ("MEDIUM: clock: force internal time to wrap early after boot"),
causing core.now() to return a date of Mar 20 on Apr 27. No backport is
needed.
This commit is contained in:
Willy Tarreau 2023-04-27 18:44:14 +02:00
parent bc3c4e85f0
commit d2f61de8c2

View File

@ -300,12 +300,20 @@ void *hlua_checkudata(lua_State *L, int ud, int class_ref)
/* This function return the current date at epoch format in milliseconds. */
int hlua_now(lua_State *L)
{
/* WT: the doc says "returns the current time" and later says that it's
* monotonic. So the best fit is to use start_date+(now-start_time).
*/
struct timeval tv;
tv_remain(&start_time, &now, &tv);
tv_add(&tv, &tv, &start_date);
lua_newtable(L);
lua_pushstring(L, "sec");
lua_pushinteger(L, now.tv_sec);
lua_pushinteger(L, tv.tv_sec);
lua_rawset(L, -3);
lua_pushstring(L, "usec");
lua_pushinteger(L, now.tv_usec);
lua_pushinteger(L, tv.tv_usec);
lua_rawset(L, -3);
return 1;
}