Fix: Add destructor to free strmap memory in sql plugin#8827
Open
Andezion wants to merge 3 commits intoElementsProject:masterfrom
Open
Fix: Add destructor to free strmap memory in sql plugin#8827Andezion wants to merge 3 commits intoElementsProject:masterfrom
Andezion wants to merge 3 commits intoElementsProject:masterfrom
Conversation
819f5f2 to
daa8715
Compare
07ef18c to
d67efa4
Compare
Changelog-None
Changelog-None
Contributor
rustyrussell
left a comment
There was a problem hiding this comment.
Hi!
This fix is both correct, and insufficient.
- Your first fix is fine, but it should be all one commit, so the Changelog-None is with the commit which actually does something. The reason it doesn't need a changelog is because it is not an unbounded leak.
- It would be great if our CI actually broke when this happened. Why didn't it?
- Turns out the complaint was about a different path (same leak though): we invoke the plugin to generate the schema for the documentation during the build. This path also needs strmap_clear, and is what the user is complaining about:
int main(int argc, char *argv[])
{
struct sql *sql;
setup_locale();
if (argc == 2 && streq(argv[1], "--print-docs")) {
tablemap tablemap;
common_setup(argv[0]);
/* plugin is NULL, so just sets up tables */
init_tablemap(NULL, &tablemap);
printf("The following tables are currently supported:\n");
strmap_iterate(&tablemap, print_one_table, NULL);
common_shutdown();
return 0;
}
...
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
(Fixes #8802 )
Problem
When building with Clang and sanitizers enabled on Ubuntu 24.04, LeakSanitizer detects 1392 bytes of leaked memory in the sql plugin during
init_tablemap():Solution
Added a
destroy_sql()destructor function that callsstrmap_clear(&sql->tablemap)to properly free the internal strmap tree nodes. The destructor is registered withtal_add_destructor(sql, destroy_sql)inmain(). Destructor to clean up strmap internal nodes.Note: table_desc structures are tal-allocated as children of plugin context,
so they're freed automatically. This only cleans up the strmap tree overhead.
This ensures all memory is properly freed when the sql plugin terminates, resolving the LeakSanitizer errors.
Changelog-Fixed: Memory leak in sql plugin - freed strmap internal nodes on plugin cleanup (1392 bytes)
Important
26.04 FREEZE March 11th: Non-bugfix PRs not ready by this date will wait for 26.06.
RC1 is scheduled on March 23rd
The final release is scheduled for April 15th.
Checklist
Before submitting the PR, ensure the following tasks are completed. If an item is not applicable to your PR, please mark it as checked:
tools/lightning-downgrade