diff --git a/src/media/audio/audio-processing/audio_processor.h b/src/media/audio/audio-processing/audio_processor.h
index 4f43a475de2d1987650c2c0238a29a57e52b043c..07a8800a7c390d3e4fd464584a8f0dfbaad56463 100644
--- a/src/media/audio/audio-processing/audio_processor.h
+++ b/src/media/audio/audio-processing/audio_processor.h
@@ -118,16 +118,20 @@ protected:
      */
     bool tidyQueues()
     {
-        while (recordQueue_.samples() > recordQueue_.frameSize() * 10) {
-            JAMI_DBG("record overflow %d / %d", recordQueue_.samples(), frameSize_);
+        auto recordFrameSize = recordQueue_.frameSize();
+        auto playbackFrameSize = playbackQueue_.frameSize();
+        while (recordQueue_.samples() > recordFrameSize * 10
+            && 2 * playbackQueue_.samples() * recordFrameSize < recordQueue_.samples() * playbackFrameSize) {
+            JAMI_LOG("record overflow {:d} / {:d} - playback: {:d}", recordQueue_.samples(), frameSize_, playbackQueue_.samples());
             recordQueue_.dequeue();
         }
-        while (playbackQueue_.samples() > playbackQueue_.frameSize() * 10) {
-            JAMI_DBG("playback overflow %d / %d", playbackQueue_.samples(), frameSize_);
+        while (playbackQueue_.samples() > playbackFrameSize * 10
+            && 2 * recordQueue_.samples() * playbackFrameSize < playbackQueue_.samples() * recordFrameSize) {
+            JAMI_LOG("playback overflow {:d} / {:d} - record: {:d}", playbackQueue_.samples(), frameSize_, recordQueue_.samples());
             playbackQueue_.dequeue();
         }
-        if (recordQueue_.samples() < recordQueue_.frameSize()
-            || playbackQueue_.samples() < playbackQueue_.frameSize()) {
+        if (recordQueue_.samples() < recordFrameSize
+            || playbackQueue_.samples() < playbackFrameSize) {
             // If there are not enough samples in either queue, we can't
             // process anything.
             return true;