mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-06-28 04:02:37 +00:00
FS-8082 #resolve #comment [mod_rayo] do not remove items from hash while iterating
This commit is contained in:
parent
1b8814430e
commit
c74264b942
@ -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
|
|||||||
}
|
}
|
||||||
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
|
|||||||
switch_safe_free(offered_call);
|
switch_safe_free(offered_call);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (offer) {
|
if (offer) {
|
||||||
iks_delete(offer);
|
iks_delete(offer);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user