@cryptotaxi247 / netdata-1 / commits / 7bbee1f74

Fix health api call (#21952)

- Add proper acquire / release logic for instances

Stelios Fragkakis committed Mar 16, 2026 at 16:02 UTC 7bbee1f747df8d07dd6027285f87517d9a84119c
1 file changed +17 -6
src/database/contexts/query_target.c
+17 -6
@@ -902,31 +902,42 @@ static ssize_t query_scope_foreach_instance(QUERY_TARGET_LOCALS *qtl, QUERY_NODE
902 if(query_instance_add(qtl, qn, qc, qt->request.ria, queryable_context, false))
903 added++;
904 }
905 - else if(unlikely(qtl->st && qtl->st->rrdcontexts.rrdcontext == rca && qtl->st->rrdcontexts.rrdinstance)) {
905 + else if(unlikely(qtl->st && qtl->st->rrdcontexts.rrdcontext == rca)) {
906 // Single chart requested
907 - RRDINSTANCE *ri = rrdinstance_acquired_value(qtl->st->rrdcontexts.rrdinstance);
907 + RRDINSTANCE_ACQUIRED *ria = (RRDINSTANCE_ACQUIRED *)dictionary_get_and_acquire_item(
908 + rc->rrdinstances, string2str(qtl->st->id));
909 + if(unlikely(!ria))
910 + return 0;
911 +
912 + RRDINSTANCE *ri = rrdinstance_acquired_value(ria);
913
914 // Check scope_instances
915 if(qt->instances.scope_pattern) {
911 - QUERY_INSTANCE qi = { .ria = qtl->st->rrdcontexts.rrdinstance };
916 + QUERY_INSTANCE qi = { .ria = ria };
917 SIMPLE_PATTERN_RESULT ret = query_instance_matches(&qi, ri,
918 qt->instances.scope_pattern, qtl->match_ids, qtl->match_names,
919 qt->request.version, qtl->host_node_id_str);
920 query_instance_strings_free(&qi);
916 - if(ret != SP_MATCHED_POSITIVE)
921 + if(ret != SP_MATCHED_POSITIVE) {
922 + rrdinstance_release(ria);
923 return 0;
924 + }
925 }
926
927 // Check scope_labels
928 if(qt->instances.scope_labels_pa || qt->instances.scope_chart_label_key_pattern) {
929 if(!query_instance_matches_labels(ri,
930 qt->instances.scope_chart_label_key_pattern,
924 - qt->instances.scope_labels_pa))
931 + qt->instances.scope_labels_pa)) {
932 + rrdinstance_release(ria);
933 return 0;
934 + }
935 }
936
928 - if(query_instance_add(qtl, qn, qc, qtl->st->rrdcontexts.rrdinstance, queryable_context, false))
937 + if(query_instance_add(qtl, qn, qc, ria, queryable_context, false))
938 added++;
939 +
940 + rrdinstance_release(ria);
941 }
942 else {
943 // Pattern query - iterate through all instances