diff options
| author | jacqueline <me@jacqueline.id.au> | 2024-08-15 09:44:29 +1000 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2024-08-15 09:44:29 +1000 |
| commit | d94c32d615e266de69f424261c46983ad10f9c70 (patch) | |
| tree | 165b455f72b9348e205f4cfb6b0b6a53c32093fb /src/drivers/pcm_buffer.cpp | |
| parent | 326cc42a63ec1bd8ff4e62da44658e8facd181c2 (diff) | |
| parent | 40c754a72a23a849321b60dbd77fa1303c77953b (diff) | |
| download | tangara-fw-d94c32d615e266de69f424261c46983ad10f9c70.tar.gz | |
Merge branch 'main' of codeberg.org:cool-tech-zone/tangara-fw
Diffstat (limited to 'src/drivers/pcm_buffer.cpp')
| -rw-r--r-- | src/drivers/pcm_buffer.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/drivers/pcm_buffer.cpp b/src/drivers/pcm_buffer.cpp index 3f4a0443..142a6376 100644 --- a/src/drivers/pcm_buffer.cpp +++ b/src/drivers/pcm_buffer.cpp @@ -66,10 +66,17 @@ IRAM_ATTR auto PcmBuffer::receive(std::span<int16_t> dest, bool isr) auto PcmBuffer::clear() -> void { while (!isEmpty()) { - size_t bytes_cleared; + size_t bytes_cleared = 0; void* data = xRingbufferReceive(ringbuf_, &bytes_cleared, 0); - vRingbufferReturnItem(ringbuf_, data); - received_ += bytes_cleared / sizeof(int16_t); + if (data) { + vRingbufferReturnItem(ringbuf_, data); + received_ += bytes_cleared / sizeof(int16_t); + } else { + // Defensively guard against looping forever if for some reason the + // buffer isn't draining. + ESP_LOGW(kTag, "PcmBuffer not draining"); + break; + } } } |
