diff --git a/src/RtpReorderQueue.c b/src/RtpReorderQueue.c index 8171a37..1456226 100644 --- a/src/RtpReorderQueue.c +++ b/src/RtpReorderQueue.c @@ -134,7 +134,7 @@ static void removeEntry(PRTP_REORDER_QUEUE queue, PRTP_QUEUE_ENTRY entry) { } static PRTP_QUEUE_ENTRY validateQueueConstraints(PRTP_REORDER_QUEUE queue) { - int needsUpdate = 0; + int dequeuePacket = 0; // Empty queue is fine if (queue->queueHead == NULL) { @@ -143,24 +143,19 @@ static PRTP_QUEUE_ENTRY validateQueueConstraints(PRTP_REORDER_QUEUE queue) { // Check that the queue's time constraint is satisfied if (PltGetMillis() - queue->oldestQueuedTimeMs > queue->maxQueueTimeMs) { - Limelog("Discarding RTP packet queued for too long\n"); - removeEntry(queue, queue->oldestQueuedEntry); - free(queue->oldestQueuedEntry->packet); - needsUpdate = 1; + Limelog("Returning RTP packet queued for too long\n"); + dequeuePacket = 1; } - // Check that the queue's size constraint is satisfied - if (!needsUpdate && queue->queueSize == queue->maxSize) { - Limelog("Discarding RTP packet after queue overgrowth\n"); - removeEntry(queue, queue->oldestQueuedEntry); - free(queue->oldestQueuedEntry->packet); - needsUpdate = 1; + // Check that the queue's size constraint is satisfied. We subtract one + // because this is validating that the queue will meet constraints _after_ + // the current packet is enqueued. + if (!dequeuePacket && queue->queueSize == queue->maxSize - 1) { + Limelog("Returning RTP packet after queue overgrowth\n"); + dequeuePacket = 1; } - if (needsUpdate) { - // Recalculate the oldest entry if needed - updateOldestQueued(queue); - + if (dequeuePacket) { // Return the lowest seq queued return getEntryByLowestSeq(queue); }