Skip to content

Commit 1d3f3af

Browse files
authored
Fixed bug in audio conference disconnection (pjsip#4198)
1 parent 7b8277e commit 1d3f3af

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

pjmedia/src/pjmedia/conference.c

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1380,7 +1380,7 @@ static void op_disconnect_ports(pjmedia_conf *conf,
13801380
{
13811381
unsigned src_slot, sink_slot;
13821382
struct conf_port *src_port = NULL, *dst_port = NULL;
1383-
unsigned i;
1383+
int i;
13841384

13851385
/* Ports must be valid. */
13861386
src_slot = prm->disconnect_ports.src;
@@ -1440,13 +1440,16 @@ static void op_disconnect_ports(pjmedia_conf *conf,
14401440
dst_port->name.ptr));
14411441

14421442
for (i=0; i<conf->max_ports; ++i) {
1443-
unsigned j;
1443+
int j;
14441444

14451445
src_port = conf->ports[i];
14461446
if (!src_port || src_port->listener_cnt == 0)
14471447
continue;
14481448

1449-
for (j=0; j<src_port->listener_cnt; ++j) {
1449+
/* We need to iterate backwards since the listener count
1450+
* can potentially decrease.
1451+
*/
1452+
for (j=src_port->listener_cnt-1; j>=0; --j) {
14501453
if (src_port->listener_slots[j] == sink_slot) {
14511454
op_param op_prm = {0};
14521455
op_prm.disconnect_ports.src = i;
@@ -1465,7 +1468,10 @@ static void op_disconnect_ports(pjmedia_conf *conf,
14651468
(int)src_port->name.slen,
14661469
src_port->name.ptr));
14671470

1468-
for (i=0; i<src_port->listener_cnt; ++i) {
1471+
/* We need to iterate backwards since the listener count
1472+
* will keep decreasing.
1473+
*/
1474+
for (i=src_port->listener_cnt-1; i>=0; --i) {
14691475
op_param op_prm = {0};
14701476
op_prm.disconnect_ports.src = src_slot;
14711477
op_prm.disconnect_ports.sink = src_port->listener_slots[i];

0 commit comments

Comments
 (0)