Skip to content

Commit

Permalink
rtp: lock more fields from rtcp_sess
Browse files Browse the repository at this point in the history
  • Loading branch information
cspiel1 committed Jan 3, 2024
1 parent e9bca3f commit 6bca09c
Showing 1 changed file with 21 additions and 1 deletion.
22 changes: 21 additions & 1 deletion src/rtp/sess.c
Original file line number Diff line number Diff line change
Expand Up @@ -103,11 +103,13 @@ static struct rtp_member *get_member(struct rtcp_sess *sess, uint32_t src)
if (sess->memberc >= MAX_MEMBERS)
return NULL;

mtx_lock(sess->lock);
mbr = member_add(sess->members, src);
if (!mbr)
return NULL;

++sess->memberc;
mtx_unlock(sess->lock);

return mbr;
}
Expand Down Expand Up @@ -357,8 +359,10 @@ int rtcp_enable(struct rtcp_sess *sess, bool enabled, const char *cname)
if (!sess)
return EINVAL;

mtx_lock(sess->lock);
sess->cname = mem_deref(sess->cname);
err = str_dup(&sess->cname, cname);
mtx_unlock(sess->lock);
if (err)
return err;

Expand Down Expand Up @@ -589,6 +593,7 @@ void rtcp_sess_rx_rtp(struct rtcp_sess *sess, struct rtp_header *hdr,
return;
}

mtx_lock(sess->lock);
if (!mbr->s) {
int err;

Expand All @@ -598,6 +603,7 @@ void rtcp_sess_rx_rtp(struct rtcp_sess *sess, struct rtp_header *hdr,
else
err = mutex_alloc(&mbr->s->lock);

mtx_unlock(sess->lock);
if (err) {
DEBUG_NOTICE("could not add sender: 0x%08x\n",
hdr->ssrc);
Expand All @@ -611,28 +617,42 @@ void rtcp_sess_rx_rtp(struct rtcp_sess *sess, struct rtp_header *hdr,
/* probation not used */
sa_cpy(&mbr->s->rtp_peer, peer);
source_unlock(mbr->s);
mtx_lock(sess->lock);
++sess->senderc;
mtx_unlock(sess->lock);
}
else {
mtx_unlock(sess->lock);
}

source_lock(mbr->s);
if (!source_update_seq(mbr->s, hdr->seq)) {
DEBUG_WARNING("rtp_update_seq() returned 0\n");
}
source_unlock(mbr->s);

mtx_lock(sess->lock);
if (sess->srate_rx) {
/* Convert from wall-clock time to timestamp units */
hdr->ts_arrive = tmr_jiffies() * sess->srate_rx / 1000;
mtx_unlock(sess->lock);

/*
* Calculate jitter only when the timestamp is different than
* last packet (see RTP FAQ
* https://www.cs.columbia.edu/~hgs/rtp/faq.html#jitter).
*/
source_lock(mbr->s);
if (hdr->ts != mbr->s->last_rtp_ts)
source_calc_jitter(mbr->s, hdr->ts,
(uint32_t)hdr->ts_arrive);
source_unlock(mbr->s);
}
else {
mtx_unlock(sess->lock);
}

source_lock(mbr->s);
mbr->s->last_rtp_ts = hdr->ts;
mbr->s->rtp_rx_bytes += payload_size;
source_unlock(mbr->s);
Expand Down Expand Up @@ -738,14 +758,14 @@ int rtcp_debug(struct re_printf *pf, const struct rtp_sock *rs)
return 0;

err |= re_hprintf(pf, "----- RTCP Session: -----\n");
mtx_lock(sess->lock);
err |= re_hprintf(pf, " cname=%s SSRC=0x%08x/%u rx=%uHz\n",
sess->cname,
rtp_sess_ssrc(sess->rs), rtp_sess_ssrc(sess->rs),
sess->srate_rx);

hash_apply(sess->members, debug_handler, pf);

mtx_lock(sess->lock);
err |= re_hprintf(pf, " TX: packets=%u, octets=%u\n",
sess->txstat.psent, sess->txstat.osent);
mtx_unlock(sess->lock);
Expand Down

0 comments on commit 6bca09c

Please sign in to comment.