]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
channelstorage_cpp_map_name_id: Fix callback returning non-matching channels.
authorGeorge Joseph <gjoseph@sangoma.com>
Wed, 9 Jul 2025 17:14:55 +0000 (11:14 -0600)
committerBen Ford <bford@sangoma.com>
Thu, 10 Jul 2025 15:25:15 +0000 (10:25 -0500)
When the callback() API was invoked but no channel passed the test, callback
would return the last channel tested instead of NULL.  It now correctly
returns NULL when no channel matches.

Resolves: #1288

main/channelstorage_cpp_map_name_id.cc

index b61fa8b9aa938a1369a440136bba9810ef30d722..c3548fe50dc6e6db1dd25c1de20780a761ceb570 100644 (file)
@@ -151,12 +151,13 @@ static struct ast_channel *callback(struct ast_channelstorage_instance *driver,
                chan = it->second;
                if (cb_fn(chan, arg, data, ao2_flags) == (CMP_MATCH | CMP_STOP)) {
                        ao2_bump(chan);
-                       break;
+                       unlock(driver);
+                       return chan;
                }
        }
        unlock(driver);
 
-       return chan;
+       return NULL;
 }
 
 enum cpp_map_iterator_type {