提交 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
iks_insert_attrib(offer, "to", to_client_jid);
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;
from_call->num_acps--;
if (selection != -1) {
break;
......@@ -3916,8 +3914,26 @@ static int send_offer_to_clients(struct rayo_call *from_call, switch_core_sessio
}
switch_safe_free(hi);
/* queue offer information */
if (globals.offer_timeout_us > 0 && sent) {
if (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;
switch_zmalloc(offered_call, sizeof(*offered_call));
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
switch_safe_free(offered_call);
}
}
}
if (offer) {
iks_delete(offer);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论