From c3fec78dddc09d82cbceb0dfa1d09d25f05aa92d Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Tue, 2 Jan 2024 11:16:26 +0100 Subject: [PATCH] pcm: handle start_treshold in snd_pcm_write_areas more robustly The start_treshold is defined as unsigned, so fix the condition to allow using values avobe LONG_MAX. Also, fix the documentation for the 64-bit platforms (INTMAX -> LONG_MAX). Fixes: https://github.com/alsa-project/alsa-lib/issues/374 Signed-off-by: Jaroslav Kysela --- src/pcm/pcm.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/pcm/pcm.c b/src/pcm/pcm.c index 75e81c03..e8986ad8 100644 --- a/src/pcm/pcm.c +++ b/src/pcm/pcm.c @@ -378,7 +378,7 @@ be started automatically from the device. For capture, if the application wants to read count of samples equal or greater then the stream will be started. If you want to use explicit start (#snd_pcm_start), you can set this value greater than ring buffer size (in samples), but use the -constant MAXINT is not a bad idea. +constant LONG_MAX or the boundary value is not a bad idea. \par Stop threshold @@ -7721,7 +7721,8 @@ snd_pcm_sframes_t snd_pcm_write_areas(snd_pcm_t *pcm, const snd_pcm_channel_area /* some plugins might automatically start the stream */ state = __snd_pcm_state(pcm); if (state == SND_PCM_STATE_PREPARED && - hw_avail >= (snd_pcm_sframes_t) pcm->start_threshold) { + hw_avail >= 0 && + (snd_pcm_uframes_t) hw_avail >= pcm->start_threshold) { err = __snd_pcm_start(pcm); if (err < 0) goto _end;