diff --git a/daemon/call.c b/daemon/call.c index d2d861c..fdb9f5c 100644 --- a/daemon/call.c +++ b/daemon/call.c @@ -1821,6 +1821,8 @@ char *call_delete_udp(const char **out, struct callmaster *m) { if (out[RE_UDP_DQ_FROMTAG] && *out[RE_UDP_DQ_FROMTAG]) { for (l = c->callstreams->head; l; l = l->next) { cs = l->data; + mutex_lock(&cs->lock); + for (i = 0; i < 2; i++) { p = &cs->peers[i]; if (!p->tag) @@ -1838,6 +1840,8 @@ char *call_delete_udp(const char **out, struct callmaster *m) { goto tag_match; } + + mutex_unlock(&cs->lock); } } @@ -1845,6 +1849,8 @@ char *call_delete_udp(const char **out, struct callmaster *m) { goto err; tag_match: + mutex_unlock(&cs->lock); + if (out[RE_UDP_DQ_VIABRANCH] && *out[RE_UDP_DQ_VIABRANCH]) { if (!g_hash_table_remove(c->branches, out[RE_UDP_DQ_VIABRANCH])) { mylog(LOG_INFO, LOG_PREFIX_CI "Branch to delete doesn't exist", c->callid, out[RE_UDP_DQ_VIABRANCH]); @@ -1907,14 +1913,7 @@ char *call_query_udp(const char **out, struct callmaster *m) { for (l = c->callstreams->head; l; l = l->next) { cs = l->data; - - if (!out[RE_UDP_DQ_FROMTAG] || !*out[RE_UDP_DQ_FROMTAG]) { - pcs[0] += cs->peers[0].rtps[0].stats.packets; - pcs[1] += cs->peers[1].rtps[0].stats.packets; - pcs[2] += cs->peers[0].rtps[1].stats.packets; - pcs[3] += cs->peers[1].rtps[1].stats.packets; - continue; - } + mutex_lock(&cs->lock); for (i = 0; i < 2; i++) { p = &cs->peers[i]; @@ -1946,6 +1945,8 @@ tag_match: pcs[2] += p->rtps[1].stats.packets; pcs[3] += px->rtps[1].stats.packets; } + + mutex_unlock(&cs->lock); } mutex_unlock(&c->lock);