Browse Source

MT#55283 fix time tracking race condition

1) Read dtxb->start while the lock is held (not strictly necessary as
   the read should be atomic anyway)
2) Expect that dtxb->start can be larger than rtpe_now.tv

The latter can happen as `rtpe_now` in a timer thread is faked to be
exactly the time when the timer was supposed to run, and not the actual
current time, which means that a newly added packet can have a later
time stamp than the "now" the timer thread is using.

Change-Id: I48fd7f78af97c6d5b802e5151d69855a90f4032d
mr10.5.3
Richard Fuchs 3 years ago
parent
commit
5680bffe92
1 changed files with 2 additions and 1 deletions
  1. +2
    -1
      daemon/codec.c

+ 2
- 1
daemon/codec.c View File

@ -3061,6 +3061,7 @@ static void __dtx_send_later(struct codec_timer *ct) {
}
int ptime = dtxb->ptime;
time_t dtxb_start = dtxb->start;
mutex_unlock(&dtxb->lock);
@ -3082,7 +3083,7 @@ static void __dtx_send_later(struct codec_timer *ct) {
"Decoder error while processing buffered RTP packet");
}
else {
unsigned int diff = rtpe_now.tv_sec - dtxb->start;
int diff = rtpe_now.tv_sec - dtxb_start;
if (rtpe_config.max_dtx <= 0 || diff < rtpe_config.max_dtx) {
ilogs(dtx, LOG_DEBUG, "RTP media for TS %lu missing, triggering DTX", ts);


Loading…
Cancel
Save