Merge "main/pbx: Don't attempt to destroy a previously destroyed exten/priority tuple"
authorMatt Jordan <mjordan@digium.com>
Mon, 20 Apr 2015 11:30:03 +0000 (06:30 -0500)
committerGerrit Code Review <gerrit2@gerrit.digium.api>
Mon, 20 Apr 2015 11:30:03 +0000 (06:30 -0500)
main/pbx.c

index 209de66..fee4191 100644 (file)
@@ -10735,6 +10735,16 @@ void __ast_context_destroy(struct ast_context *list, struct ast_hashtab *context
                                exten_iter = ast_hashtab_start_traversal(tmp->root_table);
                                while ((exten_item=ast_hashtab_next(exten_iter))) {
                                        int end_traversal = 1;
+
+                                       /*
+                                        * If the extension could not be removed from the root_table due to
+                                        * a loaded PBX app, it can exist here but have its peer_table be
+                                        * destroyed due to a previous pass through this function.
+                                        */
+                                       if (!exten_item->peer_table) {
+                                               continue;
+                                       }
+
                                        prio_iter = ast_hashtab_start_traversal(exten_item->peer_table);
                                        while ((prio_item=ast_hashtab_next(prio_iter))) {
                                                char extension[AST_MAX_EXTENSION];