Skip to content

Conversation

@Andezion
Copy link
Collaborator

@Andezion Andezion commented Jan 9, 2026

(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 calls strmap_clear(&sql->tablemap) to properly free the internal strmap tree nodes. The destructor is registered with tal_add_destructor(sql, destroy_sql) in main(). 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.

static void destroy_sql(struct sql *sql)
{
    strmap_clear(&sql->tablemap);
}

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:

  • The changelog has been updated in the relevant commit(s) according to the guidelines.
  • Tests have been added or modified to reflect the changes.
  • Documentation has been reviewed and updated as needed.
  • Related issues have been listed and linked, including any that this PR closes.
  • Important All PRs must consider how to reverse any persistent changes for tools/lightning-downgrade

@Andezion Andezion force-pushed the fix-sql-memory-leak branch 2 times, most recently from 819f5f2 to daa8715 Compare January 21, 2026 18:13
@Andezion Andezion force-pushed the fix-sql-memory-leak branch from 07ef18c to d67efa4 Compare January 26, 2026 01:03
Copy link
Contributor

@rustyrussell rustyrussell left a comment

Choose a reason for hiding this comment

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

Hi!

This fix is both correct, and insufficient.

  1. 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.
  2. It would be great if our CI actually broke when this happened. Why didn't it?
  3. 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;
	}
...

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Build failure: LeakSanitizer detects memory leaks in plugins/sql.c (init_tablemap())

2 participants