mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-22 12:52:33 +00:00
a quick fix to pbx_dundi.c to make it so it will compile. Hope I did the right thing. And some additions to removal of extens to take care of hashtab pointers in all cases.
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@89388 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
30
main/pbx.c
30
main/pbx.c
@@ -3630,9 +3630,23 @@ int ast_context_remove_extension2(struct ast_context *con, const char *extension
|
||||
ex.priority = priority;
|
||||
exten2 = ast_hashtab_lookup(exten->peer_tree, &ex);
|
||||
if (exten2) {
|
||||
if (exten2->label) /* if this exten has a label, remove that, too */
|
||||
ast_hashtab_remove_this_object(exten->peer_label_tree,exten2);
|
||||
ast_hashtab_remove_this_object(exten->peer_tree, exten2);
|
||||
ast_log(LOG_NOTICE,"Removed priority %d from extension %s context %s table\n",
|
||||
priority, exten->exten, con->name);
|
||||
if (ast_hashtab_size(exten->peer_tree) == 0) {
|
||||
/* well, if the last priority of an exten is to be removed,
|
||||
then, the extension is removed, too! */
|
||||
struct match_char *x = add_exten_to_pattern_tree(con, exten);
|
||||
if (x->exten) { /* this test for safety purposes */
|
||||
x->deleted = 1; /* with this marked as deleted, it will never show up in the scoreboard, and therefore never be found */
|
||||
x->exten = 0; /* get rid of what will become a bad pointer */
|
||||
ast_hashtab_remove_this_object(con->root_tree, exten);
|
||||
ast_log(LOG_NOTICE,"Removed extension %s from context %s table\n",
|
||||
exten->exten, con->name);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
ast_log(LOG_ERROR,"Could not find priority %d of exten %s in context %s!\n",
|
||||
priority, exten->exten, con->name);
|
||||
@@ -3691,13 +3705,21 @@ int ast_context_remove_extension2(struct ast_context *con, const char *extension
|
||||
* The next node is either the next priority or the next extension
|
||||
*/
|
||||
struct ast_exten *next_node = peer->peer ? peer->peer : peer->next;
|
||||
|
||||
if (!prev_exten) /* change the root... */
|
||||
if (next_node == peer->peer) {
|
||||
next_node->peer_tree = exten->peer_tree; /* move the priority hash tabs over */
|
||||
exten->peer_tree = 0;
|
||||
next_node->peer_tree = exten->peer_label_tree;
|
||||
exten->peer_label_tree = 0;
|
||||
}
|
||||
if (!prev_exten) { /* change the root... */
|
||||
con->root = next_node;
|
||||
else
|
||||
} else {
|
||||
prev_exten->next = next_node; /* unlink */
|
||||
if (peer->peer) /* XXX update the new head of the pri list */
|
||||
}
|
||||
if (peer->peer) { /* XXX update the new head of the pri list */
|
||||
peer->peer->next = peer->next;
|
||||
}
|
||||
|
||||
} else { /* easy, we are not first priority in extension */
|
||||
previous_peer->peer = peer->peer;
|
||||
}
|
||||
|
@@ -36,6 +36,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||
#include <zlib.h>
|
||||
#include <sys/signal.h>
|
||||
#include <pthread.h>
|
||||
#include <net/if.h>
|
||||
|
||||
#include "asterisk/file.h"
|
||||
#include "asterisk/logger.h"
|
||||
|
Reference in New Issue
Block a user