dect
/
asterisk
Archived
13
0
Fork 0

Fix some code in chan_sip that was intended to unlink multiple objects from a

container.  The OBJ_MULTIPLE flag must be provided here.  Otherwise, this would
only remove a single object.


git-svn-id: http://svn.digium.com/svn/asterisk/trunk@155241 f38db490-d61c-443f-a65b-d21fe96a405b
This commit is contained in:
russell 2008-11-07 14:50:30 +00:00
parent 1825dfee10
commit 38ff416edd
2 changed files with 9 additions and 6 deletions

View File

@ -13670,7 +13670,8 @@ static char *sip_prune_realtime(struct ast_cli_entry *e, int cmd, struct ast_cli
unref_peer(pi, "toss iterator peer ptr"); unref_peer(pi, "toss iterator peer ptr");
} }
if (pruned) { if (pruned) {
ao2_t_callback(peers, OBJ_NODATA|OBJ_UNLINK, peer_is_marked, 0, "initiating callback to remove marked peers"); ao2_t_callback(peers, OBJ_NODATA | OBJ_UNLINK | OBJ_MULTIPLE, peer_is_marked, 0,
"initiating callback to remove marked peers");
ast_cli(a->fd, "%d peers pruned.\n", pruned); ast_cli(a->fd, "%d peers pruned.\n", pruned);
} else } else
ast_cli(a->fd, "No peers found to prune.\n"); ast_cli(a->fd, "No peers found to prune.\n");
@ -13679,7 +13680,7 @@ static char *sip_prune_realtime(struct ast_cli_entry *e, int cmd, struct ast_cli
if (prunepeer) { if (prunepeer) {
struct sip_peer tmp; struct sip_peer tmp;
ast_copy_string(tmp.name, name, sizeof(tmp.name)); ast_copy_string(tmp.name, name, sizeof(tmp.name));
if ((peer = ao2_t_find(peers, &tmp, OBJ_POINTER|OBJ_UNLINK, "finding to unlink from peers"))) { if ((peer = ao2_t_find(peers, &tmp, OBJ_POINTER | OBJ_UNLINK, "finding to unlink from peers"))) {
if (peer->addr.sin_addr.s_addr) { if (peer->addr.sin_addr.s_addr) {
ao2_t_unlink(peers_by_ip, peer, "unlinking peer from peers_by_ip also"); ao2_t_unlink(peers_by_ip, peer, "unlinking peer from peers_by_ip also");
} }
@ -20613,7 +20614,8 @@ static void *do_monitor(void *data)
of time since the last time we did it (when MWI is being sent, we can of time since the last time we did it (when MWI is being sent, we can
get back to this point every millisecond or less) get back to this point every millisecond or less)
*/ */
ao2_t_callback(dialogs, OBJ_UNLINK|OBJ_NODATA, dialog_needdestroy, &t, "callback to remove dialogs w/needdestroy"); ao2_t_callback(dialogs, OBJ_UNLINK | OBJ_NODATA | OBJ_MULTIPLE, dialog_needdestroy, &t,
"callback to remove dialogs w/needdestroy");
/* the old methodology would be to restart the search for dialogs to delete with every /* the old methodology would be to restart the search for dialogs to delete with every
dialog that was found and destroyed, probably because the list contents would change, dialog that was found and destroyed, probably because the list contents would change,
@ -21817,7 +21819,7 @@ static struct sip_peer *build_peer(const char *name, struct ast_variable *v, str
during reload during reload
*/ */
ast_copy_string(tmp_peer.name, name, sizeof(tmp_peer.name)); ast_copy_string(tmp_peer.name, name, sizeof(tmp_peer.name));
peer = ao2_t_find(peers, &tmp_peer, OBJ_POINTER|OBJ_UNLINK, "find and unlink peer from peers table"); peer = ao2_t_find(peers, &tmp_peer, OBJ_POINTER | OBJ_UNLINK, "find and unlink peer from peers table");
} }
if (peer) { if (peer) {
@ -23650,7 +23652,8 @@ static int sip_do_reload(enum channelreloadreason reason)
start_poke = time(0); start_poke = time(0);
/* Prune peers who still are supposed to be deleted */ /* Prune peers who still are supposed to be deleted */
ao2_t_callback(peers, OBJ_NODATA|OBJ_UNLINK, peer_is_marked, 0, "callback to remove marked peers"); ao2_t_callback(peers, OBJ_NODATA | OBJ_UNLINK | OBJ_MULTIPLE, peer_is_marked, 0,
"callback to remove marked peers");
ast_debug(4, "--------------- Done destroying pruned peers\n"); ast_debug(4, "--------------- Done destroying pruned peers\n");

View File

@ -4108,7 +4108,7 @@ static int xmldoc_parse_argument(struct ast_xml_node *fixnode, int insideparamet
{ {
struct ast_xml_node *node = fixnode; struct ast_xml_node *node = fixnode;
const char *argname; const char *argname;
int count=0, ret = 0; int count = 0, ret = 0;
if (!node || !ast_xml_node_get_children(node)) { if (!node || !ast_xml_node_get_children(node)) {
return ret; return ret;