Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Conversation

@SimonHeimberg
Copy link
Contributor

@SimonHeimberg SimonHeimberg commented Aug 20, 2025

Type of Change

Bugfix

Issue(s) Closed

Fixes #6808 fixes #6809 fixes #6810 fixes #6811 fixes #6812 fixes #6812 fixes #6813 fixes #6814 fixes #6815 fixes #6816 fixes #6817 fixes #6818 fixes #6820 fixes #6821 fixes #6822 fixes #6828 fixes #6829 fixes #6838

To Reproduce

see reported memory leak from a recent test run, like https://github.com/widelands/widelands/actions/runs/17108726999/job/48524654051#step:9:1417

New Behavior

Now there are much fewer memory leaks because lua does not use longjump.
(see summary of leaks below in comment)

How it Works

The code for eris+lua is compiled with c++. Now lua throws an exception on error instead of doing longjump (and catches the exception). So stack is unwound and variables get deleted properly (including calling the destructor).

Possible Regressions

  • see below in TODO
  • save/load should work as before and be compatible
  • ??

Additional context

As expected GitHub complained about the headers. I ignored it on my machine. So no proof that many leaks are fixed.

How shall the two following points be fixed? As the label says: HELP WANTED

TODO

  • handle unused headers reported for src/scripting/lua.h (but files importing lua.h use them)
  • properly exclude compiler warnings about header files from src/third_party/eris/

This is the recommended way to use lua with c++.
It uses exceptions instead of longjump, which will fix several memory leaks.

There are still problems:
- unused headers in src/scripting/lua.h
- compiler warnings about header files from src/third_party/eris/
…RFACE_SYSTEM_INCLUDE_DIRECTORIES

Mark eris headers as system headers, because warnings of those are normally ignored by compilers.

trying to follow
https://stackoverflow.com/questions/56707123/how-to-suppress-clang-warnings-in-third-party-library-header-file-in-cmakelists

But I seem to not understand it.
This works, but there are many source files. It is a workaround only anyway.
Compile works. But of course this is not a good solution.

The good thing is that many memory leaks do not show up no more.
@SimonHeimberg SimonHeimberg added help wanted Extra attention is needed memory & performance Fix bottlenecks, memory leaks, ASan, ... labels Aug 20, 2025
@bunnybot
Copy link

Mirrored on Codeberg as #CB5230.

@bunnybot bunnybot changed the title 6808 fix longjump leaks WIP: 6808 fix longjump leaks Aug 21, 2025
@bunnybot bunnybot added this to the v1.4 milestone Aug 21, 2025
@bunnybot bunnybot added the ci:fail CI checks failed label Aug 21, 2025
@SimonHeimberg
Copy link
Contributor Author

SimonHeimberg commented Aug 21, 2025

As expected GitHub has complained about the headers. I ignored it on my machine. So no proof (here) that many leaks are fixed.

How shall the two points (in TODO) be fixed? As the label says: HELP WANTED

about "properly exclude compiler warnings about header files from ..."

luna_impl
PROPERTIES
COMPILE_OPTIONS -Wno-old-style-cast # TODO(somebody): remove this and ignore for header only
) # because code/src/third_party/eris/lua.h and third_party/eris/luaconf.h cast integer
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Listing all files like this gets much too many files. Maybe half of the project. So only a minor advantage over disabling generally, but much more work.
TODO remove

base_exceptions
third_party_eris
)
set_target_properties(scripting_base PROPERTIES INTERFACE_SYSTEM_INCLUDE_DIRECTORIES ../third_party/eris/)
Copy link
Contributor Author

@SimonHeimberg SimonHeimberg Aug 21, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I either do not find out how to set this path correctly, or it does not work for this case.
I tried:

  • path relative to CMakeLists.txt (as here)
  • path relative to main source
  • absolute path to header file dir
  • absolute path to header file dir in build

set_source_files_properties(${ERIS_SRC} ${ERIS_H}
DIRECTORY . ..
PROPERTIES COMPILE_OPTIONS -Wno-old-style-cast
)
Copy link
Contributor Author

@SimonHeimberg SimonHeimberg Aug 21, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

setting COMPILE_OPTIONS for the header files has probably no effect. (Would it work for pre-compiled headers?)

@bunnybot bunnybot added ci:cancelled CI checks were cancelled and removed ci:fail CI checks failed ci:cancelled CI checks were cancelled labels Aug 21, 2025
set_source_files_properties(${ERIS_SRC} PROPERTIES LANGUAGE CXX)
set_source_files_properties(${ERIS_SRC} ${ERIS_H}
DIRECTORY . ..
PROPERTIES COMPILE_OPTIONS -Wno-old-style-cast
Copy link
Contributor Author

@SimonHeimberg SimonHeimberg Aug 21, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Compile option -Wno-old-style-cast is not supported on windows msvc:
https://github.com/widelands/widelands/actions/runs/17128350443/job/48587469069?pr=6871#step:8:158

@bunnybot bunnybot added the ci:fail CI checks failed label Aug 21, 2025
@SimonHeimberg
Copy link
Contributor Author

SimonHeimberg commented Aug 21, 2025

from run testsuite / testsuite (Debug, ubuntu-24.04, clang-18)

You may compare to https://github.com/widelands/widelands/actions/runs/17051950618?pr=6851#summary-48341685572
... which is not based on very recent master, but the result will not have changed a lot. (It creates the summary automatically.)

There 39 origins, here 14 origins

There, for the first reported test (test/maps/lua_testsuite.wmf/scripting/test_lua_in_game.lua)

47 leaks
SUMMARY: AddressSanitizer: 5519 byte(s) leaked in 146 allocation(s). 

here

4 leaks
SUMMARY: AddressSanitizer: 336 byte(s) leaked in 4 allocation(s).

...

created with utils/test/memory_leak_summary_from_gh_log.py from #6851

memory leaks

Tip

To find the full traceback, go to the log and copy the line from the traceback here in the log's search field.

==34935==ERROR: LeakSanitizer: detected memory leaks

triggered by test test/maps/lua_testsuite.wmf/scripting/test_lua_in_game.lua

Details
  • Indirect leak of 152 byte(s) in 1 object(s)
    our origin: #1 0x55d8b0f6cc11 in Widelands::Road::request_carrier(Widelands::Road::CarrierSlot&) /home/runner/work/widelands/widelands/src/economy/road.cc:156:25
  • Indirect leak of 152 byte(s) in 1 object(s)
    our origin: #1 0x55d8b0f6cc11 in Widelands::Road::request_carrier(Widelands::Road::CarrierSlot&) /home/runner/work/widelands/widelands/src/economy/road.cc:156:25
  • Indirect leak of 16 byte(s) in 1 object(s)
    our origin: #1 0x55d8b0b692a5 in Trackable::Trackable() /home/runner/work/widelands/widelands/src/economy/trackptr.h:82:14
  • Indirect leak of 16 byte(s) in 1 object(s)
    our origin: #1 0x55d8b0b692a5 in Trackable::Trackable() /home/runner/work/widelands/widelands/src/economy/trackptr.h:82:14
4 leaks
SUMMARY: AddressSanitizer: 336 byte(s) leaked in 4 allocation(s).

==35229==ERROR: LeakSanitizer: detected memory leaks

triggered by test test/maps/plain.wmf/scripting/test_text_renderer_does_not_crash.lua

Details
  • Direct leak of 104 byte(s) in 1 object(s)
    our origin: #1 0x558c0d7467fb in RT::Tag::parse_content(RT::TextStream&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, RT::TagConstraint, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, RT::TagConstraint>>>&, std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>> const&) /home/runner/work/widelands/widelands/src/graphic/text/rt_parse.cc:182:16
  • Direct leak of 104 byte(s) in 1 object(s)
    our origin: #1 0x558c0d74f530 in RT::Parser::parse(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>> const&) /home/runner/work/widelands/widelands/src/graphic/text/rt_parse.cc:605:12
  • Direct leak of 104 byte(s) in 1 object(s)
    our origin: #1 0x558c0d7467fb in RT::Tag::parse_content(RT::TextStream&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, RT::TagConstraint, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, RT::TagConstraint>>>&, std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>> const&) /home/runner/work/widelands/widelands/src/graphic/text/rt_parse.cc:182:16
  • Direct leak of 104 byte(s) in 1 object(s)
    our origin: #1 0x558c0d7467fb in RT::Tag::parse_content(RT::TextStream&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, RT::TagConstraint, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, RT::TagConstraint>>>&, std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>> const&) /home/runner/work/widelands/widelands/src/graphic/text/rt_parse.cc:182:16
  • Direct leak of 104 byte(s) in 1 object(s)
    our origin: #1 0x558c0d74f530 in RT::Parser::parse(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>> const&) /home/runner/work/widelands/widelands/src/graphic/text/rt_parse.cc:605:12
  • Direct leak of 104 byte(s) in 1 object(s)
    our origin: #1 0x558c0d7467fb in RT::Tag::parse_content(RT::TextStream&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, RT::TagConstraint, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, RT::TagConstraint>>>&, std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>> const&) /home/runner/work/widelands/widelands/src/graphic/text/rt_parse.cc:182:16
  • Indirect leak of 288 byte(s) in 4 object(s)
    our origin: #8 0x558c0d743bdb in RT::AttrMap::add_attribute(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, RT::Attr*) /home/runner/work/widelands/widelands/src/graphic/text/rt_parse.cc:64:2
  • Indirect leak of 288 byte(s) in 4 object(s)
    our origin: #8 0x558c0d743bdb in RT::AttrMap::add_attribute(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, RT::Attr*) /home/runner/work/widelands/widelands/src/graphic/text/rt_parse.cc:64:2
  • Indirect leak of 256 byte(s) in 4 object(s)
    our origin: #1 0x558c0d744cce in RT::Tag::parse_attribute(RT::TextStream&, std::unordered_set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>&) /home/runner/work/widelands/widelands/src/graphic/text/rt_parse.cc:126:38
  • Indirect leak of 256 byte(s) in 4 object(s)
    our origin: #1 0x558c0d744cce in RT::Tag::parse_attribute(RT::TextStream&, std::unordered_set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>&) /home/runner/work/widelands/widelands/src/graphic/text/rt_parse.cc:126:38
  • Indirect leak of 104 byte(s) in 1 object(s)
    our origin: #1 0x558c0d7467fb in RT::Tag::parse_content(RT::TextStream&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, RT::TagConstraint, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, RT::TagConstraint>>>&, std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>> const&) /home/runner/work/widelands/widelands/src/graphic/text/rt_parse.cc:182:16
  • Indirect leak of 104 byte(s) in 1 object(s)
    our origin: #1 0x558c0d7467fb in RT::Tag::parse_content(RT::TextStream&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, RT::TagConstraint, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, RT::TagConstraint>>>&, std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>> const&) /home/runner/work/widelands/widelands/src/graphic/text/rt_parse.cc:182:16
  • Indirect leak of 40 byte(s) in 1 object(s)
    our origin: #1 0x558c0d745d96 in RT::Tag::parse_content(RT::TextStream&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, RT::TagConstraint, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, RT::TagConstraint>>>&, std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>> const&) /home/runner/work/widelands/widelands/src/graphic/text/rt_parse.cc:154:26
  • Indirect leak of 40 byte(s) in 1 object(s)
    our origin: #1 0x558c0d745d96 in RT::Tag::parse_content(RT::TextStream&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, RT::TagConstraint, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, RT::TagConstraint>>>&, std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>> const&) /home/runner/work/widelands/widelands/src/graphic/text/rt_parse.cc:154:26
  • Indirect leak of 8 byte(s) in 1 object(s)
    our origin: #7 0x558c0d745dd7 in RT::Tag::parse_content(RT::TextStream&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, RT::TagConstraint, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, RT::TagConstraint>>>&, std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>> const&) /home/runner/work/widelands/widelands/src/graphic/text/rt_parse.cc:154:16
  • Indirect leak of 8 byte(s) in 1 object(s)
    our origin: #7 0x558c0d745dd7 in RT::Tag::parse_content(RT::TextStream&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, RT::TagConstraint, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, RT::TagConstraint>>>&, std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>> const&) /home/runner/work/widelands/widelands/src/graphic/text/rt_parse.cc:154:16
16 leaks
SUMMARY: AddressSanitizer: 2016 byte(s) leaked in 28 allocation(s).

==35829==ERROR: LeakSanitizer: detected memory leaks

triggered by test test/templates/test_fortified_village-artifacts.lua

Details
  • Direct leak of 32 byte(s) in 1 object(s)
    our origin: #1 0x559313daad72 in Widelands::Game::send_player_build_building(int, Widelands::Coords const&, unsigned short) /home/runner/work/widelands/widelands/src/logic/game.cc:1080:22
1 leaks
SUMMARY: AddressSanitizer: 32 byte(s) leaked in 1 allocation(s).

==35904==ERROR: LeakSanitizer: detected memory leaks

triggered by test test/templates/test_trading_outpost-collectors.lua

Details
  • Direct leak of 280 byte(s) in 5 object(s)
    our origin: #1 0x560040e65e94 in Widelands::Game::send_player_build_road(int, Widelands::Path&) /home/runner/work/widelands/widelands/src/logic/game.cc:1088:22
  • Direct leak of 160 byte(s) in 5 object(s)
    our origin: #1 0x560040e661d6 in Widelands::Game::send_player_set_soldier_preference(Widelands::MapObject&, Widelands::SoldierPreference) /home/runner/work/widelands/widelands/src/logic/game.cc:1111:5
  • Direct leak of 160 byte(s) in 5 object(s)
    our origin: #1 0x560040e66a44 in Widelands::Game::send_player_change_soldier_capacity(Widelands::Building&, int) /home/runner/work/widelands/widelands/src/logic/game.cc:1166:5
  • Indirect leak of 160 byte(s) in 5 object(s)
    our origin: #1 0x56004212e011 in AI::DefaultAI::create_shortcut_road(Widelands::Flag const&, unsigned short, Time const&) /home/runner/work/widelands/widelands/src/ai/defaultai.cc:4369:28
  • Indirect leak of 40 byte(s) in 5 object(s)
    our origin: #6 0x560040f99e1e in Widelands::Map::findpath(Widelands::Coords, Widelands::Coords, int, Widelands::Path&, Widelands::CheckStep const&, unsigned int, unsigned int, Widelands::WareWorker) const /home/runner/work/widelands/widelands/src/logic/map.cc:2393:14
5 leaks
SUMMARY: AddressSanitizer: 800 byte(s) leaked in 25 allocation(s).

==35958==ERROR: LeakSanitizer: detected memory leaks

triggered by test test/maps/lua_testsuite.wmf/scripting/editor_test_lua_in_editor.lua

Details
  • Indirect leak of 608 byte(s) in 4 object(s)
    our origin: #1 0x562c5e027c11 in Widelands::Road::request_carrier(Widelands::Road::CarrierSlot&) /home/runner/work/widelands/widelands/src/economy/road.cc:156:25
  • Indirect leak of 64 byte(s) in 4 object(s)
    our origin: #1 0x562c5dc242a5 in Trackable::Trackable() /home/runner/work/widelands/widelands/src/economy/trackptr.h:82:14
2 leaks
SUMMARY: AddressSanitizer: 672 byte(s) leaked in 8 allocation(s).

memory leaks by origin

from 14 origins

src/ai/defaultai.cc:4369:28

search issue on gh new issue

  • #1 0x56004212e011 in AI::DefaultAI::create_shortcut_road(Widelands::Flag const&, unsigned short, Time const&) /home/runner/work/widelands/widelands/src/ai/defaultai.cc:4369:28
    triggered by test/templates/test_trading_outpost-collectors.lua

src/economy/road.cc:156:25

search issue on gh new issue

  • #1 0x562c5e027c11 in Widelands::Road::request_carrier(Widelands::Road::CarrierSlot&) /home/runner/work/widelands/widelands/src/economy/road.cc:156:25
    triggered by test/maps/lua_testsuite.wmf/scripting/editor_test_lua_in_editor.lua

  • #1 0x55d8b0f6cc11 in Widelands::Road::request_carrier(Widelands::Road::CarrierSlot&) /home/runner/work/widelands/widelands/src/economy/road.cc:156:25
    triggered by test/maps/lua_testsuite.wmf/scripting/test_lua_in_game.lua

  • #1 0x55d8b0f6cc11 in Widelands::Road::request_carrier(Widelands::Road::CarrierSlot&) /home/runner/work/widelands/widelands/src/economy/road.cc:156:25
    triggered by test/maps/lua_testsuite.wmf/scripting/test_lua_in_game.lua

src/economy/trackptr.h:82:14

search issue on gh new issue

  • #1 0x562c5dc242a5 in Trackable::Trackable() /home/runner/work/widelands/widelands/src/economy/trackptr.h:82:14
    triggered by test/maps/lua_testsuite.wmf/scripting/editor_test_lua_in_editor.lua

  • #1 0x55d8b0b692a5 in Trackable::Trackable() /home/runner/work/widelands/widelands/src/economy/trackptr.h:82:14
    triggered by test/maps/lua_testsuite.wmf/scripting/test_lua_in_game.lua

  • #1 0x55d8b0b692a5 in Trackable::Trackable() /home/runner/work/widelands/widelands/src/economy/trackptr.h:82:14
    triggered by test/maps/lua_testsuite.wmf/scripting/test_lua_in_game.lua

src/graphic/text/rt_parse.cc:64:2

search issue on gh new issue

  • #8 0x558c0d743bdb in RT::AttrMap::add_attribute(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, RT::Attr*) /home/runner/work/widelands/widelands/src/graphic/text/rt_parse.cc:64:2
    triggered by test/maps/plain.wmf/scripting/test_text_renderer_does_not_crash.lua

  • #8 0x558c0d743bdb in RT::AttrMap::add_attribute(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, RT::Attr*) /home/runner/work/widelands/widelands/src/graphic/text/rt_parse.cc:64:2
    triggered by test/maps/plain.wmf/scripting/test_text_renderer_does_not_crash.lua

src/graphic/text/rt_parse.cc:126:38

search issue on gh new issue

  • #1 0x558c0d744cce in RT::Tag::parse_attribute(RT::TextStream&, std::unordered_set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>&) /home/runner/work/widelands/widelands/src/graphic/text/rt_parse.cc:126:38
    triggered by test/maps/plain.wmf/scripting/test_text_renderer_does_not_crash.lua

  • #1 0x558c0d744cce in RT::Tag::parse_attribute(RT::TextStream&, std::unordered_set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>&) /home/runner/work/widelands/widelands/src/graphic/text/rt_parse.cc:126:38
    triggered by test/maps/plain.wmf/scripting/test_text_renderer_does_not_crash.lua

src/graphic/text/rt_parse.cc:154:16

search issue on gh new issue

  • #7 0x558c0d745dd7 in RT::Tag::parse_content(RT::TextStream&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, RT::TagConstraint, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, RT::TagConstraint>>>&, std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>> const&) /home/runner/work/widelands/widelands/src/graphic/text/rt_parse.cc:154:16
    triggered by test/maps/plain.wmf/scripting/test_text_renderer_does_not_crash.lua

  • #7 0x558c0d745dd7 in RT::Tag::parse_content(RT::TextStream&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, RT::TagConstraint, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, RT::TagConstraint>>>&, std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>> const&) /home/runner/work/widelands/widelands/src/graphic/text/rt_parse.cc:154:16
    triggered by test/maps/plain.wmf/scripting/test_text_renderer_does_not_crash.lua

src/graphic/text/rt_parse.cc:154:26

search issue on gh new issue

  • #1 0x558c0d745d96 in RT::Tag::parse_content(RT::TextStream&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, RT::TagConstraint, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, RT::TagConstraint>>>&, std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>> const&) /home/runner/work/widelands/widelands/src/graphic/text/rt_parse.cc:154:26
    triggered by test/maps/plain.wmf/scripting/test_text_renderer_does_not_crash.lua

  • #1 0x558c0d745d96 in RT::Tag::parse_content(RT::TextStream&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, RT::TagConstraint, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, RT::TagConstraint>>>&, std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>> const&) /home/runner/work/widelands/widelands/src/graphic/text/rt_parse.cc:154:26
    triggered by test/maps/plain.wmf/scripting/test_text_renderer_does_not_crash.lua

src/graphic/text/rt_parse.cc:182:16

search issue on gh new issue

  • #1 0x558c0d7467fb in RT::Tag::parse_content(RT::TextStream&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, RT::TagConstraint, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, RT::TagConstraint>>>&, std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>> const&) /home/runner/work/widelands/widelands/src/graphic/text/rt_parse.cc:182:16
    triggered by test/maps/plain.wmf/scripting/test_text_renderer_does_not_crash.lua

  • #1 0x558c0d7467fb in RT::Tag::parse_content(RT::TextStream&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, RT::TagConstraint, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, RT::TagConstraint>>>&, std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>> const&) /home/runner/work/widelands/widelands/src/graphic/text/rt_parse.cc:182:16
    triggered by test/maps/plain.wmf/scripting/test_text_renderer_does_not_crash.lua

  • #1 0x558c0d7467fb in RT::Tag::parse_content(RT::TextStream&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, RT::TagConstraint, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, RT::TagConstraint>>>&, std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>> const&) /home/runner/work/widelands/widelands/src/graphic/text/rt_parse.cc:182:16
    triggered by test/maps/plain.wmf/scripting/test_text_renderer_does_not_crash.lua

  • #1 0x558c0d7467fb in RT::Tag::parse_content(RT::TextStream&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, RT::TagConstraint, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, RT::TagConstraint>>>&, std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>> const&) /home/runner/work/widelands/widelands/src/graphic/text/rt_parse.cc:182:16
    triggered by test/maps/plain.wmf/scripting/test_text_renderer_does_not_crash.lua

  • #1 0x558c0d7467fb in RT::Tag::parse_content(RT::TextStream&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, RT::TagConstraint, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, RT::TagConstraint>>>&, std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>> const&) /home/runner/work/widelands/widelands/src/graphic/text/rt_parse.cc:182:16
    triggered by test/maps/plain.wmf/scripting/test_text_renderer_does_not_crash.lua

  • #1 0x558c0d7467fb in RT::Tag::parse_content(RT::TextStream&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, RT::TagConstraint, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, RT::TagConstraint>>>&, std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>> const&) /home/runner/work/widelands/widelands/src/graphic/text/rt_parse.cc:182:16
    triggered by test/maps/plain.wmf/scripting/test_text_renderer_does_not_crash.lua

src/graphic/text/rt_parse.cc:605:12

search issue on gh new issue

  • #1 0x558c0d74f530 in RT::Parser::parse(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>> const&) /home/runner/work/widelands/widelands/src/graphic/text/rt_parse.cc:605:12
    triggered by test/maps/plain.wmf/scripting/test_text_renderer_does_not_crash.lua

  • #1 0x558c0d74f530 in RT::Parser::parse(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>> const&) /home/runner/work/widelands/widelands/src/graphic/text/rt_parse.cc:605:12
    triggered by test/maps/plain.wmf/scripting/test_text_renderer_does_not_crash.lua

src/logic/game.cc:1080:22

search issue on gh new issue

  • #1 0x559313daad72 in Widelands::Game::send_player_build_building(int, Widelands::Coords const&, unsigned short) /home/runner/work/widelands/widelands/src/logic/game.cc:1080:22
    triggered by test/templates/test_fortified_village-artifacts.lua

src/logic/game.cc:1088:22

search issue on gh new issue

  • #1 0x560040e65e94 in Widelands::Game::send_player_build_road(int, Widelands::Path&) /home/runner/work/widelands/widelands/src/logic/game.cc:1088:22
    triggered by test/templates/test_trading_outpost-collectors.lua

src/logic/game.cc:1111:5

search issue on gh new issue

  • #1 0x560040e661d6 in Widelands::Game::send_player_set_soldier_preference(Widelands::MapObject&, Widelands::SoldierPreference) /home/runner/work/widelands/widelands/src/logic/game.cc:1111:5
    triggered by test/templates/test_trading_outpost-collectors.lua

src/logic/game.cc:1166:5

search issue on gh new issue

  • #1 0x560040e66a44 in Widelands::Game::send_player_change_soldier_capacity(Widelands::Building&, int) /home/runner/work/widelands/widelands/src/logic/game.cc:1166:5
    triggered by test/templates/test_trading_outpost-collectors.lua

src/logic/map.cc:2393:14

search issue on gh new issue

  • #6 0x560040f99e1e in Widelands::Map::findpath(Widelands::Coords, Widelands::Coords, int, Widelands::Path&, Widelands::CheckStep const&, unsigned int, unsigned int, Widelands::WareWorker) const /home/runner/work/widelands/widelands/src/logic/map.cc:2393:14
    triggered by test/templates/test_trading_outpost-collectors.lua

@SimonHeimberg SimonHeimberg changed the title WIP: 6808 fix longjump leaks WIP: fix longjump leaks Aug 21, 2025
@SimonHeimberg
Copy link
Contributor Author

looking at the remaining origin lines, I am positive that those will be closed by the other pull requests fixing memory leaks.

@SimonHeimberg
Copy link
Contributor Author

SimonHeimberg commented Aug 25, 2025

I might not be easy available when it is time to finish this pr. Feel free to take over.

@SimonHeimberg
Copy link
Contributor Author

Instead of ignoring warnings of a header file, a patch similar to this one might be easiest:

diff --git a/src/third_party/eris/luaconf.h b/src/third_party/eris/luaconf.h
index 9ecf49777d..c7078a98d4 100644
--- a/src/third_party/eris/luaconf.h
+++ b/src/third_party/eris/luaconf.h
@@ -751,8 +751,12 @@
 #if LUA_FLOAT_TYPE == LUA_FLOAT_LONGDOUBLE
 #define LUAL_BUFFERSIZE                8192
 #else
+#ifdef __cplusplus
+#define LUAL_BUFFERSIZE   (static_cast<int>(0x80 * sizeof(void*) * sizeof(lua_Integer)))
+#else
 #define LUAL_BUFFERSIZE   ((int)(0x80 * sizeof(void*) * sizeof(lua_Integer)))
 #endif
+#endif
 
 /* }================================================================== */
 
``

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment