Mercurial > prosody-hg
changeset 14080:973609bad40a
util.time: Import sleep from luasocket
We might not want to use the full LuaSocket for such a tiny function which will
never change.
This drops win32 support but that should be fine.
| author | Link Mauve <linkmauve@linkmauve.fr> |
|---|---|
| date | Fri, 30 Jan 2026 14:08:53 +0100 |
| parents | 0ea2848d7771 |
| children | 7c9fd032c788 |
| files | prosody prosodyctl teal-src/prosody/util/time.d.tl util-src/time.c |
| diffstat | 4 files changed, 26 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/prosody Fri Jan 30 14:44:04 2026 +0100 +++ b/prosody Fri Jan 30 14:08:53 2026 +0100 @@ -85,7 +85,7 @@ prosody.events.fire_event("very-bad-error", {error = err, traceback = traceback}); end - local sleep = require"socket".sleep; + local sleep = require "prosody.util.time".sleep; local server = require "prosody.net.server"; while select(2, xpcall(server.loop, catch_uncaught_error)) ~= "quitting" do
--- a/prosodyctl Fri Jan 30 14:44:04 2026 +0100 +++ b/prosodyctl Fri Jan 30 14:08:53 2026 +0100 @@ -65,13 +65,13 @@ local configmanager = require "prosody.core.configmanager"; local modulemanager = require "prosody.core.modulemanager" local prosodyctl = require "prosody.util.prosodyctl" -local socket = require "socket" local dependencies = require "prosody.util.dependencies"; local lfs = dependencies.softreq "lfs"; ----------------------- local parse_args = require "prosody.util.argparse".parse; +local sleep = require "prosody.util.time".sleep; local human_io = require "prosody.util.human.io"; local show_message, show_warning = prosodyctl.show_message, prosodyctl.show_warning; @@ -265,7 +265,7 @@ show_message("Prosody is still not running. Please give it some time or check your log files for errors."); return 2; end - socket.sleep(0.5); + sleep(0.5); i = i + 1; end show_message("Started"); @@ -346,7 +346,7 @@ show_message("Prosody is still running. Please give it some time or check your log files for errors."); return 2; end - socket.sleep(0.5); + sleep(0.5); i = i + 1; end show_message("Stopped"); @@ -456,6 +456,7 @@ -- These diverge from the module._VERSION convention readline = "Version"; } + local socket = dependencies.softreq"socket"; local lunbound = dependencies.softreq"lunbound"; local lxp = dependencies.softreq"lxp"; local hashes = dependencies.softreq"prosody.util.hashes";
--- a/teal-src/prosody/util/time.d.tl Fri Jan 30 14:44:04 2026 +0100 +++ b/teal-src/prosody/util/time.d.tl Fri Jan 30 14:08:53 2026 +0100 @@ -2,5 +2,6 @@ local record lib now : function () : number monotonic : function () : number + sleep : function (number) end return lib
--- a/util-src/time.c Fri Jan 30 14:44:04 2026 +0100 +++ b/util-src/time.c Fri Jan 30 14:08:53 2026 +0100 @@ -4,6 +4,7 @@ #include <time.h> #include <lua.h> +#include <lauxlib.h> static lua_Number tv2number(struct timespec *tv) { return tv->tv_sec + tv->tv_nsec * 1e-9; @@ -23,6 +24,23 @@ return 1; } +/* This function has been imported from luasocket */ +static int lc_sleep(lua_State *L) { + double n = luaL_checknumber(L, 1); + struct timespec t, r; + if (n < 0.0) n = 0.0; + if (n > INT_MAX) n = INT_MAX; + t.tv_sec = (int) n; + n -= t.tv_sec; + t.tv_nsec = (int) (n * 1000000000); + if (t.tv_nsec >= 1000000000) t.tv_nsec = 999999999; + while (nanosleep(&t, &r) != 0) { + t.tv_sec = r.tv_sec; + t.tv_nsec = r.tv_nsec; + } + return 0; +} + int luaopen_prosody_util_time(lua_State *L) { lua_createtable(L, 0, 2); { @@ -30,6 +48,8 @@ lua_setfield(L, -2, "now"); lua_pushcfunction(L, lc_time_monotonic); lua_setfield(L, -2, "monotonic"); + lua_pushcfunction(L, lc_sleep); + lua_setfield(L, -2, "sleep"); } return 1; }
