提交 1588ebda authored 作者: Chris Rienzo's avatar Chris Rienzo

FS-8082 #resolve #comment [mod_rayo] do not remove items from hash while iterating

上级 6f1a00fe
...@@ -3904,10 +3904,8 @@ static int send_offer_to_clients(struct rayo_call *from_call, switch_core_sessio ...@@ -3904,10 +3904,8 @@ static int send_offer_to_clients(struct rayo_call *from_call, switch_core_sessio
iks_insert_attrib(offer, "to", to_client_jid); iks_insert_attrib(offer, "to", to_client_jid);
RAYO_SEND_MESSAGE_DUP(from_call, to_client_jid, offer); RAYO_SEND_MESSAGE_DUP(from_call, to_client_jid, offer);
/* remove client JID from list of available clients */
switch_core_hash_delete(from_call->acps, to_client_jid);
from_call->num_acps--;
sent = 1; sent = 1;
from_call->num_acps--;
if (selection != -1) { if (selection != -1) {
break; break;
...@@ -3916,8 +3914,26 @@ static int send_offer_to_clients(struct rayo_call *from_call, switch_core_sessio ...@@ -3916,8 +3914,26 @@ static int send_offer_to_clients(struct rayo_call *from_call, switch_core_sessio
} }
switch_safe_free(hi); switch_safe_free(hi);
/* queue offer information */ if (sent) {
if (globals.offer_timeout_us > 0 && sent) { /* remove offered client JID(s) from list of available clients */
hi = NULL;
for (hi = switch_core_hash_first(from_call->pcps); hi; hi = switch_core_hash_next(&hi)) {
const char *to_client_jid = NULL;
const void *key;
void *val;
/* get client jid that was sent offer */
switch_core_hash_this(hi, &key, NULL, &val);
to_client_jid = (const char *)key;
switch_assert(to_client_jid);
/* remove client jid from available controlling parties */
switch_core_hash_delete(from_call->acps, to_client_jid);
}
switch_safe_free(hi);
/* remember when offer was sent for this call to track timeouts */
if (globals.offer_timeout_us > 0) {
struct offered_call_info *offered_call; struct offered_call_info *offered_call;
switch_zmalloc(offered_call, sizeof(*offered_call)); switch_zmalloc(offered_call, sizeof(*offered_call));
offered_call->offer_time = switch_micro_time_now(); offered_call->offer_time = switch_micro_time_now();
...@@ -3928,6 +3944,7 @@ static int send_offer_to_clients(struct rayo_call *from_call, switch_core_sessio ...@@ -3928,6 +3944,7 @@ static int send_offer_to_clients(struct rayo_call *from_call, switch_core_sessio
switch_safe_free(offered_call); switch_safe_free(offered_call);
} }
} }
}
if (offer) { if (offer) {
iks_delete(offer); iks_delete(offer);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论