diff --git a/changelog.md b/changelog.md index 0ef527973e..841864bda6 100644 --- a/changelog.md +++ b/changelog.md @@ -1,8 +1,17 @@ ## Fixes/improvements -* [#3731] Fix string.format() omission in OpenOS package.lua. -* [#3735] Fix server hangs on long-lasting HTTP requests. +* [#3703] Fix potential packet memory leak. +* [#3729] Fix potential crash when opening the manual. +* Added a configuration option for network packet TTL. (Timothé GRISOT) +* Improved mod load times on certain platforms. (charagarland) +* Updated Chinese translation. (HfSr) +* Updated Unifont to 16.0.02. + +## OpenOS fixes/improvements + +* [#3714] Fix an OpenOS 1.8.0 regression causing event.pullFiltered() to effectively ignore filter timeouts. +* [#3727] Fix an exception handler bug in process.lua, uncovered by fixing recursive xpcall() handling in 1.8.4. ## List of contributors -asie, REUSS-dev +asie, charagarland, DragDen, HfSr, Timothé GRISOT diff --git a/src/main/resources/assets/opencomputers/loot/openos/lib/core/boot.lua b/src/main/resources/assets/opencomputers/loot/openos/lib/core/boot.lua index f60e8155cc..61496667a1 100644 --- a/src/main/resources/assets/opencomputers/loot/openos/lib/core/boot.lua +++ b/src/main/resources/assets/opencomputers/loot/openos/lib/core/boot.lua @@ -1,7 +1,7 @@ -- called from /init.lua local raw_loadfile = ... -_G._OSVERSION = "OpenOS 1.8.6" +_G._OSVERSION = "OpenOS 1.8.7" -- luacheck: globals component computer unicode _OSVERSION local component = component diff --git a/src/main/resources/assets/opencomputers/loot/openos/lib/event.lua b/src/main/resources/assets/opencomputers/loot/openos/lib/event.lua index d216979d65..1ad8b46981 100644 --- a/src/main/resources/assets/opencomputers/loot/openos/lib/event.lua +++ b/src/main/resources/assets/opencomputers/loot/openos/lib/event.lua @@ -140,8 +140,13 @@ function event.pullFiltered(...) filter = args[2] end + local deadline = computer.uptime() + (seconds or math.huge) repeat - local signal = table.pack(computer.pullSignal(seconds)) + local waitTime = deadline - computer.uptime() + if waitTime <= 0 then + break + end + local signal = table.pack(computer.pullSignal(waitTime)) if signal.n > 0 then if not (seconds or filter) or filter == nil or filter(table.unpack(signal, 1, signal.n)) then return table.unpack(signal, 1, signal.n) diff --git a/src/main/resources/assets/opencomputers/loot/openos/lib/process.lua b/src/main/resources/assets/opencomputers/loot/openos/lib/process.lua index 49f0848fd2..be4ad3e581 100644 --- a/src/main/resources/assets/opencomputers/loot/openos/lib/process.lua +++ b/src/main/resources/assets/opencomputers/loot/openos/lib/process.lua @@ -68,15 +68,19 @@ function process.load(path, env, init, name) if type(msg) == "table" and msg.reason == "terminated" then return msg.code or 0 end - local stack = debug.traceback():gsub("^([^\n]*\n)[^\n]*\n[^\n]*\n","%1") - io.stderr:write(string.format("%s:\n%s", msg or "", stack)) - return 128 -- syserr + return debug.traceback() end, ...) } - --result[1] is false if the exception handler also crashed if not result[1] and type(result[2]) ~= "number" then - io.stderr:write("process library exception handler crashed: ", tostring(result[2])) + -- run exception handler + xpcall(function() + local stack = result[2]:gsub("^([^\n]*\n)[^\n]*\n[^\n]*\n","%1") + io.stderr:write(string.format("%s:\n%s", msg or "", stack)) + end, + function(msg) + io.stderr:write("process library exception handler crashed: ", tostring(msg)) + end) end -- onError opens a file, you can't open a file without a process, we close the process last