diff options
| author | Tursiae <git@tursiae.org> | 2025-02-09 18:25:16 +1100 |
|---|---|---|
| committer | cooljqln <cooljqln@noreply.codeberg.org> | 2025-02-10 23:42:43 +0000 |
| commit | fe7c26d27d47f6087b67af9fe740f674078b5da1 (patch) | |
| tree | fadf61f4729f58a0d49868a5d58b3a0db7f41707 /lib/esp-idf-lua/lua/lbaselib.c | |
| parent | 8819a60dd245e1d1e66bdded4a5ca07ab13ee7aa (diff) | |
| download | tangara-fw-fe7c26d27d47f6087b67af9fe740f674078b5da1.tar.gz | |
TTS: Avoid exhausting the WorkerPool with concurrent TTS playback.
Reported in issue #258.
As of v1.2.0, if /.tangara-tts/ samples are present on the SD card, and
>= 4 menu items with matching TTS samples are highlighted in the UI, and
no audio output (headphones or BT sink) is connected, the `tts::Player`'s
invocation of lambdas on the WorkerPool will result in worker task
exhaustion.
This is because we get stuck in state where the `drivers::PcmBuffer` is
not accepting any new samples, and the inner loop in `Player::decodeToSink`
that pushes to the output isn't checking to see whether playback was
cancelled. So the loop never terminates, and we consume that worker slot.
Repeat with another 3 menu items, and, hey, all four worker threads are
consumed with TTS that will not terminate until headphones/BT are connected.
Diffstat (limited to 'lib/esp-idf-lua/lua/lbaselib.c')
0 files changed, 0 insertions, 0 deletions
