[asterisk-commits] murf: trunk r89388 - in /trunk: main/pbx.c pbx/pbx_dundi.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Sat Nov 17 11:46:37 CST 2007
Author: murf
Date: Sat Nov 17 11:46:36 2007
New Revision: 89388
URL: http://svn.digium.com/view/asterisk?view=rev&rev=89388
Log:
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.
Modified:
trunk/main/pbx.c
trunk/pbx/pbx_dundi.c
Modified: trunk/main/pbx.c
URL: http://svn.digium.com/view/asterisk/trunk/main/pbx.c?view=diff&rev=89388&r1=89387&r2=89388
==============================================================================
--- trunk/main/pbx.c (original)
+++ trunk/main/pbx.c Sat Nov 17 11:46:36 2007
@@ -3630,9 +3630,23 @@
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 @@
* 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;
}
Modified: trunk/pbx/pbx_dundi.c
URL: http://svn.digium.com/view/asterisk/trunk/pbx/pbx_dundi.c?view=diff&rev=89388&r1=89387&r2=89388
==============================================================================
--- trunk/pbx/pbx_dundi.c (original)
+++ trunk/pbx/pbx_dundi.c Sat Nov 17 11:46:36 2007
@@ -36,6 +36,7 @@
#include <zlib.h>
#include <sys/signal.h>
#include <pthread.h>
+#include <net/if.h>
#include "asterisk/file.h"
#include "asterisk/logger.h"
More information about the asterisk-commits
mailing list