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
pull/1649/head
Richard Fuchs 3 years ago
parent
commit
91606ce312
1 changed files with 2 additions and 1 deletions
  1. +2
    -1
      daemon/codec.c

+ 2
- 1
daemon/codec.c View File

@ -2652,6 +2652,7 @@ static void __dtx_send_later(struct timerthread_queue *ttq, void *p) {
}
int ptime = dtxb->ptime;
time_t dtxb_start = dtxb->start;
mutex_unlock(&dtxb->lock);
@ -2673,7 +2674,7 @@ static void __dtx_send_later(struct timerthread_queue *ttq, void *p) {
"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