fix(ai): align ai_list_providers with documented contract
All checks were successful
CI Code / Check coding style (pull_request) Successful in 48s
CI Code / Check spelling (pull_request) Successful in 33s
CI Code / Linux (debian) (pull_request) Successful in 4m47s
CI Code / Linux (arch) (pull_request) Successful in 5m29s
CI Code / Code Coverage (pull_request) Successful in 2m45s
CI Code / Linux (ubuntu) (pull_request) Successful in 4m29s

Remove ai_provider_ref() from ai_list_providers() so the returned
providers do not need to be unref'd by the caller. This matches the
header docstring which states "caller must not free the list or
providers". Also update all callers (cmd_ai_providers, tests) to
remove redundant ai_provider_unref() calls.
This commit is contained in:
2026-04-30 19:09:46 +00:00
parent caa0b3ccba
commit 93ad7379e2
4 changed files with 5 additions and 11 deletions

View File

@@ -328,7 +328,7 @@ ai_list_providers(void)
g_hash_table_iter_init(&iter, providers);
while (g_hash_table_iter_next(&iter, &key, &value)) {
result = g_list_append(result, ai_provider_ref((AIProvider*)value));
result = g_list_append(result, value);
}
return result;

View File

@@ -97,7 +97,8 @@ void ai_provider_unref(AIProvider* provider);
/**
* List all configured providers.
* @return GList of AIProvider* (caller must not free the list or providers)
* @return GList of AIProvider* (caller must not free the list or providers,
* and must not unref the returned providers)
*/
GList* ai_list_providers(void);

View File

@@ -10929,7 +10929,6 @@ cmd_ai_providers(ProfWin* window, const char* const command, gchar** args)
}
cons_show("");
g_free(key);
ai_provider_unref(provider);
}
g_list_free(providers);

View File

@@ -78,10 +78,7 @@ test_ai_list_providers(void** state)
assert_non_null(providers);
assert_int_equal(2, g_list_length(providers)); /* openai and perplexity */
/* Free list and unref providers (ai_list_providers returns ref'd providers) */
for (GList* l = providers; l; l = g_list_next(l)) {
ai_provider_unref(l->data);
}
/* Free list (ai_list_providers returns non-ref'd providers; caller must not unref) */
g_list_free(providers);
/* Add another provider */
@@ -89,10 +86,7 @@ test_ai_list_providers(void** state)
providers = ai_list_providers();
assert_int_equal(3, g_list_length(providers));
/* Free list and unref providers */
for (GList* l = providers; l; l = g_list_next(l)) {
ai_provider_unref(l->data);
}
/* Free list */
g_list_free(providers);
}