secondlife / viewer

🖥️ Second Life's official client
GNU Lesser General Public License v2.1
209 stars 52 forks source link

Lua: require\\inspect.lua stack overflow ((null)) #2341

Open AtlasLinden opened 1 month ago

AtlasLinden commented 1 month ago

Environment

Lua Viewer: Second Life Release 7.1.9.10286089860

Description

Calling UI.listviews() causes a stackoverflow error. 183: stack overflow ((null))[string "C:\Program Files\SecondLifeLua\scripts/lua/require\inspect.lua"]:183: stack overflow ((null))

Reproduction steps

Run the following script: local UI = require 'UI'; local inspect = require 'inspect'; uiList = UI.listviews(); LL.print_info(inspect(uiList))

AtlasLinden commented 1 month ago

See also https://github.com/secondlife/viewer/issues/2237

AtlasLinden commented 1 week ago

As of 7.1.12.11016247540 the error has now changed to the following:

[string "C:\Program Files\SecondLifeLua\scripts/lua/require\inspect.lua"]:183: Possible infinite loop, terminated.
[string "C:\Program Files\SecondLifeLua\scripts/lua/require\inspect.lua"]:183 function countCycles
[string "C:\Program Files\SecondLifeLua\scripts/lua/require\inspect.lua"]:183 function countCycles
[string "C:\Program Files\SecondLifeLua\scripts/lua/require\inspect.lua"]:348 function inspect
[string "C:\Program Files\SecondLifeLua\scripts/lua/require\inspect.lua"]:367 function __call
[string "lua: local UI = require 'UI'; local inspect =..."]:1
[string "C:\Program Files\SecondLifeLua\scripts/lua/require\inspect.lua"]:183: Possible infinite loop, terminated.
[string "C:\Program Files\SecondLifeLua\scripts/lua/require\inspect.lua"]:183 function countCycles
[string "C:\Program Files\SecondLifeLua\scripts/lua/require\inspect.lua"]:183 function countCycles
[string "C:\Program Files\SecondLifeLua\scripts/lua/require\inspect.lua"]:348 function inspect
[string "C:\Program Files\SecondLifeLua\scripts/lua/require\inspect.lua"]:367 function __call
[string "lua: local UI = require 'UI'; local inspect =..."]:1
nat-goodspeed commented 1 week ago

I have a potential fix pending. It makes the inspect module yield to the viewer from time to time to reassure the viewer that the script is still performing useful work.