Closed Neptnium closed 1 month ago
I enabled debug in config and here are the results: For the code:
function testHandler(data)
print(data)
end
MP.RegisterEvent("testEvent", "testHandler")
MP.TriggerGlobalEvent("testEvent", "test data")
I get the following logs:
[10/05/24 10:23:08.286] [DEBUG] renamed old log file to 'Server.old.log'
[10/05/24 10:23:08.286] [INFO] BeamMP Server v3.4.0
[10/05/24 10:23:08.286] Main [INFO] Loaded 3 Mods
[10/05/24 10:23:08.286] LuaEngine [DEBUG] Creating lua state for state id "!test"
[10/05/24 10:23:08.287] PPSMonitor [DEBUG] PPSMonitor starting
[10/05/24 10:23:08.287] TCPServer [INFO] Vehicle event network online
[10/05/24 10:23:08.287] UDPServer [INFO] Vehicle data network online on port 31000 with a Max of 64 Clients
[10/05/24 10:23:08.287] LuaEngine [DEBUG] Lua plugin "!test" starting in "Resources/Server/!test"
[10/05/24 10:23:08.599] Main [INFO] Server up-to-date!
[10/05/24 10:23:08.599] PluginMonitor [INFO] PluginMonitor started
[10/05/24 10:23:08.787] Lua:!test [LUA ERROR] SOL2 assertion failure: Assertion `push_count == 1` failed in /__w/BeamMP-Server/BeamMP-Server/bin/vcpkg_installed/x64-linux/include/sol/stack.hpp:208. This *should* be a fatal error, but BeamMP Server overrides it to not be fatal. This may cause the Lua Engine to crash, or cause other issues.
[10/05/24 10:23:08.787] Lua:!test [DEBUG] json: ["test data"]
[10/05/24 10:23:08.787] Lua:!test [EVENT] testEvent
[10/05/24 10:23:08.787] Lua:!test [LUA] test data
[10/05/24 10:23:08.787] LuaEngine [EVENT] onInit
[10/05/24 10:23:13.292] Heartbeat [DEBUG] heartbeat (after 5s)
[10/05/24 10:23:14.103] Main(Waiting) [INFO] ALL SYSTEMS STARTED SUCCESSFULLY, EVERYTHING IS OKAY
onInit
event, but I get the same issue:function testHandler(data)
print(data)
end
MP.RegisterEvent("testEvent", "testHandler")
function initHandler()
print("initHandler Called")
MP.TriggerGlobalEvent("testEvent", "test data")
end
MP.RegisterEvent("onInit", "initHandler")
I get logs:
[10/05/24 10:25:18.176] [DEBUG] renamed old log file to 'Server.old.log'
[10/05/24 10:25:18.176] [INFO] BeamMP Server v3.4.0
[10/05/24 10:25:18.176] Main [INFO] Loaded 3 Mods
[10/05/24 10:25:18.177] PPSMonitor [DEBUG] PPSMonitor starting
[10/05/24 10:25:18.177] LuaEngine [DEBUG] Creating lua state for state id "!test"
[10/05/24 10:25:18.177] TCPServer [INFO] Vehicle event network online
[10/05/24 10:25:18.177] UDPServer [INFO] Vehicle data network online on port 31000 with a Max of 64 Clients
[10/05/24 10:25:18.177] LuaEngine [DEBUG] Lua plugin "!test" starting in "Resources/Server/!test"
[10/05/24 10:25:18.401] Main [INFO] Server up-to-date!
[10/05/24 10:25:18.401] PluginMonitor [INFO] PluginMonitor started
[10/05/24 10:25:18.677] LuaEngine [EVENT] onInit
[10/05/24 10:25:18.677] Lua:!test [LUA] initHandler Called
[10/05/24 10:25:18.677] Lua:!test [LUA ERROR] SOL2 assertion failure: Assertion `push_count == 1` failed in /__w/BeamMP-Server/BeamMP-Server/bin/vcpkg_installed/x64-linux/include/sol/stack.hpp:208. This *should* be a fatal error, but BeamMP Server overrides it to not be fatal. This may cause the Lua Engine to crash, or cause other issues.
[10/05/24 10:25:18.677] Lua:!test [DEBUG] json: ["test data"]
[10/05/24 10:25:18.677] Lua:!test [EVENT] testEvent
[10/05/24 10:25:18.677] Lua:!test [LUA] test data
[10/05/24 10:25:23.181] Heartbeat [DEBUG] heartbeat (after 5s)
[10/05/24 10:25:23.905] Main(Waiting) [INFO] ALL SYSTEMS STARTED SUCCESSFULLY, EVERYTHING IS OKAY
I'm not sure, but will look in the code and keep updated on my findings
Feels like this is the right track, by passing 2 arguments to the event, you will get 2 assertion failures!
function testHandler(data1, data2)
print(data1, data2)
end
MP.RegisterEvent("testEvent", "testHandler")
MP.TriggerGlobalEvent("testEvent", "test1", "test2")
Log:
[10/05/24 10:52:19.703] [INFO] BeamMP Server v3.4.0
[10/05/24 10:52:19.704] Main [INFO] Loaded 3 Mods
[10/05/24 10:52:19.704] PPSMonitor [DEBUG] PPSMonitor starting
[10/05/24 10:52:19.704] LuaEngine [DEBUG] Creating lua state for state id "!test"
[10/05/24 10:52:19.704] UDPServer [INFO] Vehicle data network online on port 31000 with a Max of 64 Clients
[10/05/24 10:52:19.704] LuaEngine [DEBUG] Lua plugin "!test" starting in "Resources/Server/!test"
[10/05/24 10:52:19.704] TCPServer [INFO] Vehicle event network online
[10/05/24 10:52:19.950] Main [INFO] Server up-to-date!
[10/05/24 10:52:19.950] PluginMonitor [INFO] PluginMonitor started
[10/05/24 10:52:20.204] Lua:!test [LUA ERROR] SOL2 assertion failure: Assertion `push_count == 1` failed in /__w/BeamMP-Server/BeamMP-Server/bin/vcpkg_installed/x64-linux/include/sol/stack.hpp:208. This *should* be a fatal error, but BeamMP Server overrides it to not be fatal. This may cause the Lua Engine to crash, or cause other issues.
[10/05/24 10:52:20.204] Lua:!test [LUA ERROR] SOL2 assertion failure: Assertion `push_count == 1` failed in /__w/BeamMP-Server/BeamMP-Server/bin/vcpkg_installed/x64-linux/include/sol/stack.hpp:208. This *should* be a fatal error, but BeamMP Server overrides it to not be fatal. This may cause the Lua Engine to crash, or cause other issues.
[10/05/24 10:52:20.204] Lua:!test [DEBUG] json: ["test1","test2"]
[10/05/24 10:52:20.204] Lua:!test [EVENT] testEvent
[10/05/24 10:52:20.204] Lua:!test [LUA] test1 test2
[10/05/24 10:52:20.204] LuaEngine [EVENT] onInit
For me the issue is located here: https://github.com/BeamMP/BeamMP-Server/blob/minor/src/TLuaEngine.cpp#L461-L462
While testing the follwing code:
function testHandler(data1, data2)
print(data1, data2)
end
MP.RegisterEvent("testEvent", "testHandler")
local test = function() return true end
MP.TriggerGlobalEvent("testEvent", "test Str", test)
I got the following logs:
[10/05/24 11:20:13.344] [DEBUG] renamed old log file to 'Server.old.log'
[10/05/24 11:20:13.344] [INFO] BeamMP Server v3.4.0
[10/05/24 11:20:13.344] Main [INFO] Loaded 3 Mods
[10/05/24 11:20:13.345] LuaEngine [DEBUG] Creating lua state for state id "!test"
[10/05/24 11:20:13.345] PPSMonitor [DEBUG] PPSMonitor starting
[10/05/24 11:20:13.345] UDPServer [INFO] Vehicle data network online on port 31000 with a Max of 64 Clients
[10/05/24 11:20:13.345] LuaEngine [DEBUG] Lua plugin "!test" starting in "Resources/Server/!test"
[10/05/24 11:20:13.345] TCPServer [INFO] Vehicle event network online
[10/05/24 11:20:13.345] Lua:!test [LUA ERROR] SOL2 assertion failure: Assertion `push_count == 1` failed in /__w/BeamMP-Server/BeamMP-Server/bin/vcpkg_installed/x64-linux/include/sol/stack.hpp:208. This *should* be a fatal error, but BeamMP Server overrides it to not be fatal. This may cause the Lua Engine to crash, or cause other issues.
[10/05/24 11:20:13.345] Lua:!test [LUA ERROR] SOL2 assertion failure: Assertion `push_count == 1` failed in /__w/BeamMP-Server/BeamMP-Server/bin/vcpkg_installed/x64-linux/include/sol/stack.hpp:208. This *should* be a fatal error, but BeamMP Server overrides it to not be fatal. This may cause the Lua Engine to crash, or cause other issues.
[10/05/24 11:20:13.345] Lua:!test [WARN] Passed a value of type 'function' to TriggerGlobalEvent("testEvent", ...). This type can not be serialized, and cannot be passed between states. It will arrive as <nil> in handlers.
[10/05/24 11:20:13.345] Lua:!test [DEBUG] json: ["test Str","BEAMMP_SERVER_INTERNAL_NIL_VALUE"]
[10/05/24 11:20:13.345] Lua:!test [EVENT] testEvent
[10/05/24 11:20:13.345] Lua:!test [LUA] test Str <nil>
[10/05/24 11:20:13.345] LuaEngine [EVENT] onInit
[10/05/24 11:20:13.588] Main [INFO] Server up-to-date!
The interesting part is:
[10/05/24 11:20:13.345] Lua:!test [LUA ERROR] SOL2 assertion failure: Assertion `push_count == 1` failed in /__w/BeamMP-Server/BeamMP-Server/bin/vcpkg_installed/x64-linux/include/sol/stack.hpp:208. This *should* be a fatal error, but BeamMP Server overrides it to not be fatal. This may cause the Lua Engine to crash, or cause other issues.
[10/05/24 11:20:13.345] Lua:!test [LUA ERROR] SOL2 assertion failure: Assertion `push_count == 1` failed in /__w/BeamMP-Server/BeamMP-Server/bin/vcpkg_installed/x64-linux/include/sol/stack.hpp:208. This *should* be a fatal error, but BeamMP Server overrides it to not be fatal. This may cause the Lua Engine to crash, or cause other issues.
[10/05/24 11:20:13.345] Lua:!test [WARN] Passed a value of type 'function' to TriggerGlobalEvent("testEvent", ...). This type can not be serialized, and cannot be passed between states. It will arrive as <nil> in handlers.
[10/05/24 11:20:13.345] Lua:!test [DEBUG] json: ["test Str","BEAMMP_SERVER_INTERNAL_NIL_VALUE"]
[10/05/24 11:20:13.345] Lua:!test [EVENT] testEvent
[10/05/24 11:20:13.345] Lua:!test [LUA] test Str <nil>
Which tells me that the issue is before the type validation for the arguments, and the fact that by passing 2 args, i get the error twice makes me think that is is located between line 461 and 462!
It could also be Table.add
that causes the issue
https://github.com/BeamMP/BeamMP-Server/blob/minor/src/TLuaEngine.cpp#L469
https://github.com/BeamMP/BeamMP-Server/blob/minor/src/TLuaEngine.cpp#L473
https://github.com/BeamMP/BeamMP-Server/blob/minor/src/TLuaEngine.cpp#L479
All of this seems to correspond to raw_table_set
of SOL2's stack.hpp
function wich calls SOL_ASSERT(push_count == 1);
Update
It could also be
Table.add
that causes the issue https://github.com/BeamMP/BeamMP-Server/blob/minor/src/TLuaEngine.cpp#L469 https://github.com/BeamMP/BeamMP-Server/blob/minor/src/TLuaEngine.cpp#L473 https://github.com/BeamMP/BeamMP-Server/blob/minor/src/TLuaEngine.cpp#L479All of this seems to correspond to
raw_table_set
of SOL2'sstack.hpp
function wich callsSOL_ASSERT(push_count == 1);
it was exactly this, thank you very much :)
I wrote this in the commit for the fix as well, but basically, the behavior of add
is not well defined when the table is not sequential, and we're also using it in a bit of an odd way. Replacing it with set
and some boilerplate seems to work fine!
I wrote this in the commit for the fix as well, but basically, the behavior of
add
is not well defined when the table is not sequential, and we're also using it in a bit of an odd way. Replacing it withset
and some boilerplate seems to work fine!
Ok, this explains it, Thanks a lot for the quick fix !!!
Fill out general information OS (windows, linux, ...): BeamMP-Server Version: v3.4.0 (BeamMP-Server.debian.11.x86_64)
Describe the bug When calling an event with
MP.TriggerLocalEvent
orMP.TriggerGlobalEvent
you will get anSOL2 assertion failure
. Getting the return value withFuture:GetResults()
will also make anSOL2 assertion failure
. BUT, everything works nomrally execpt for this assertion failure, the right data is passed to the event, and you get the right data that is returned.To Reproduce Here are examples of code that will make the errors:
Expected behavior No SOL3 assertion failure
Logs (For only 1 assertion error)