From f18a9bc7866c0ac0c90507bce6573e4f7d37ae4d Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Jan 12 2021 06:10:31 +0000 Subject: import alsa-utils-1.2.4-2.el8 --- diff --git a/SOURCES/alsa-git.patch b/SOURCES/alsa-git.patch new file mode 100644 index 0000000..b6ad492 --- /dev/null +++ b/SOURCES/alsa-git.patch @@ -0,0 +1,441 @@ +From 737b64e1940b29c575be3942cd9f87aa390d93b2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=E7=A9=8D=E4=B8=B9=E5=B0=BC=20Dan=20Jacobson?= + +Date: Sun, 18 Oct 2020 18:33:54 +0800 +Subject: [PATCH 02/14] alsamixer: Fix the mixer views description in man page + +Fix grammar mess. + +From: Dan Jacobson +Signed-off-by: Jaroslav Kysela +--- + alsamixer/alsamixer.1 | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/alsamixer/alsamixer.1 b/alsamixer/alsamixer.1 +index 8d34680..2d711cf 100644 +--- a/alsamixer/alsamixer.1 ++++ b/alsamixer/alsamixer.1 +@@ -34,7 +34,7 @@ Toggle the using of colors. + + .SH MIXER VIEWS + +-The top-left corner of \fBalsamixer\fP is the are to show some basic ++The top-left corner of \fBalsamixer\fP shows some basic + information: the card name, the mixer chip name, the current view + mode and the currently selected mixer item. + When the mixer item is switched off, \fI[Off]\fP is displayed in its +-- +2.29.2 + +From 986a1bd3d2eebd41a2925969826fca870b2cd330 Mon Sep 17 00:00:00 2001 +From: Jaroslav Kysela +Date: Fri, 23 Oct 2020 12:05:56 +0200 +Subject: [PATCH 06/14] aplay: cosmetic code fix in xrun() + +Signed-off-by: Jaroslav Kysela +--- + aplay/aplay.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/aplay/aplay.c b/aplay/aplay.c +index a27220d..ae60988 100644 +--- a/aplay/aplay.c ++++ b/aplay/aplay.c +@@ -1676,7 +1676,8 @@ static void xrun(void) + prg_exit(EXIT_FAILURE); + } + return; /* ok, data should be accepted again */ +- } if (snd_pcm_status_get_state(status) == SND_PCM_STATE_DRAINING) { ++ } ++ if (snd_pcm_status_get_state(status) == SND_PCM_STATE_DRAINING) { + if (verbose) { + fprintf(stderr, _("Status(DRAINING):\n")); + snd_pcm_status_dump(status, log); +-- +2.29.2 + + +From c1b92db5ef01311e5fc983f3134caa00826d0c2d Mon Sep 17 00:00:00 2001 +From: Jaroslav Kysela +Date: Sun, 8 Nov 2020 19:11:12 +0100 +Subject: [PATCH 07/14] aplay: fix the CPU busy loop in the pause handler + +Use the standard poll mechanism to ensure that there's +something in the input to avoid busy loop on the file +descriptor with the non-block mode set. + +Signed-off-by: Jaroslav Kysela +--- + aplay/aplay.c | 17 +++++++++++++++-- + 1 file changed, 15 insertions(+), 2 deletions(-) + +diff --git a/aplay/aplay.c b/aplay/aplay.c +index ae60988..d385da2 100644 +--- a/aplay/aplay.c ++++ b/aplay/aplay.c +@@ -1553,6 +1553,19 @@ static void done_stdin(void) + tcsetattr(fileno(stdin), TCSANOW, &term); + } + ++static char wait_for_input(void) ++{ ++ struct pollfd pfd; ++ unsigned char b; ++ ++ do { ++ pfd.fd = fileno(stdin); ++ pfd.events = POLLIN; ++ poll(&pfd, 1, -1); ++ } while (read(fileno(stdin), &b, 1) != 1); ++ return b; ++} ++ + static void do_pause(void) + { + int err; +@@ -1571,7 +1584,7 @@ static void do_pause(void) + return; + } + while (1) { +- while (read(fileno(stdin), &b, 1) != 1); ++ b = wait_for_input(); + if (b == ' ' || b == '\r') { + while (read(fileno(stdin), &b, 1) == 1); + if (snd_pcm_state(handle) == SND_PCM_STATE_SUSPENDED) +@@ -1596,7 +1609,7 @@ static void check_stdin(void) + while (read(fileno(stdin), &b, 1) == 1); + fprintf(stderr, _("\r=== PAUSE === ")); + fflush(stderr); +- do_pause(); ++ do_pause(); + fprintf(stderr, " \r"); + fflush(stderr); + } +-- +2.29.2 + + +From 5812f37d877c12bc594b9ffddc493d305991963a Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Wed, 9 Dec 2020 18:35:49 +0100 +Subject: [PATCH 08/14] alsa-info: Add lsusb and stream outputs + +We need more detailed information for USB-audio devices, at least the +lsusb -v output and the contents of stream* proc files. +Let's add them to alsa-info.sh output. + +Signed-off-by: Takashi Iwai +--- + alsa-info/alsa-info.sh | 33 +++++++++++++++++++++++++++++++++ + 1 file changed, 33 insertions(+) + +diff --git a/alsa-info/alsa-info.sh b/alsa-info/alsa-info.sh +index f179bfa..3871b97 100755 +--- a/alsa-info/alsa-info.sh ++++ b/alsa-info/alsa-info.sh +@@ -476,6 +476,18 @@ cat /proc/asound/card*/codec\#* > $TEMPDIR/alsa-hda-intel.tmp 2> /dev/null + cat /proc/asound/card*/codec97\#0/ac97\#0-0 > $TEMPDIR/alsa-ac97.tmp 2> /dev/null + cat /proc/asound/card*/codec97\#0/ac97\#0-0+regs > $TEMPDIR/alsa-ac97-regs.tmp 2> /dev/null + ++#Check for USB descriptors ++if [ -x /usr/bin/lsusb ]; then ++ for f in /proc/asound/card[0-9]*/usbbus; do ++ test -f "$f" || continue ++ id=$(sed 's@/@:@' $f) ++ lsusb -v -s $id >> $TEMPDIR/lsusb.tmp 2> /dev/null ++ done ++fi ++ ++#Check for USB stream setup ++cat /proc/asound/card*/stream[0-9]* > $TEMPDIR/alsa-usbstream.tmp 2> /dev/null ++ + #Check for USB mixer setup + cat /proc/asound/card*/usbmixer > $TEMPDIR/alsa-usbmixer.tmp 2> /dev/null + +@@ -649,6 +661,27 @@ if [ -s "$TEMPDIR/alsa-ac97.tmp" ]; then + echo "" >> $FILE + fi + ++if [ -s "$TEMPDIR/lsusb.tmp" ]; then ++ echo "!!USB Descriptors" >> $FILE ++ echo "!!---------------" >> $FILE ++ echo "--startcollapse--" >> $FILE ++ cat $TEMPDIR/lsusb.tmp >> $FILE ++ echo "--endcollapse--" >> $FILE ++ echo "" >> $FILE ++ echo "" >> $FILE ++fi ++ ++if [ -s "$TEMPDIR/lsusb.tmp" ]; then ++ echo "!!USB Stream information" >> $FILE ++ echo "!!----------------------" >> $FILE ++ echo "--startcollapse--" >> $FILE ++ echo "" >> $FILE ++ cat $TEMPDIR/alsa-usbstream.tmp >> $FILE ++ echo "--endcollapse--" >> $FILE ++ echo "" >> $FILE ++ echo "" >> $FILE ++fi ++ + if [ -s "$TEMPDIR/alsa-usbmixer.tmp" ]; then + echo "!!USB Mixer information" >> $FILE + echo "!!---------------------" >> $FILE +-- +2.29.2 + + +From 878e1a7c0f03233530e7675ae015aced069c971d Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Fri, 11 Dec 2020 23:41:59 +0100 +Subject: [PATCH 10/14] alsactl: Fix double decrease of lock timeout + +The state_lock() has a loop to wait for the lock file creation, and +the timeout value gets decremented twice mistakenly, which leads to a +half timeout (5 seconds) than expected 10 seconds. Fix it. + +Signed-off-by: Takashi Iwai +--- + alsactl/lock.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/alsactl/lock.c b/alsactl/lock.c +index 4a48539..05f6e4d 100644 +--- a/alsactl/lock.c ++++ b/alsactl/lock.c +@@ -63,7 +63,6 @@ static int state_lock_(const char *file, int lock, int timeout, int _fd) + if (fd < 0) { + if (errno == EBUSY || errno == EAGAIN) { + sleep(1); +- timeout--; + } else { + err = -errno; + goto out; +-- +2.29.2 + + +From c53f7cd03881092d5a61505d23ab8f920b7faf12 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Fri, 11 Dec 2020 23:46:23 +0100 +Subject: [PATCH 11/14] alsactl: Fix race at creating a lock file + +A race at creating a lock file in state_lock() was discovered +recently: namely, between the first open(O_RDWR) and the second +open(O_RDWR|O_CREAT|O_EXCL) calls, another alsactl invocation may +already create a lock file, then the second open() will return EEXIST, +which isn't handled properly and treated as a fatal error. + +In this patch, we check EEXIST case and try again open() with O_RDWR. +This must succeed usually, and if it fails, handle finally as the +fatal error. + +BugLink: https://bugzilla.opensuse.org/show_bug.cgi?id=1179904 +Signed-off-by: Takashi Iwai +--- + alsactl/lock.c | 11 ++++++++--- + 1 file changed, 8 insertions(+), 3 deletions(-) + +diff --git a/alsactl/lock.c b/alsactl/lock.c +index 05f6e4d..5b47462 100644 +--- a/alsactl/lock.c ++++ b/alsactl/lock.c +@@ -63,10 +63,15 @@ static int state_lock_(const char *file, int lock, int timeout, int _fd) + if (fd < 0) { + if (errno == EBUSY || errno == EAGAIN) { + sleep(1); +- } else { +- err = -errno; +- goto out; ++ continue; + } ++ if (errno == EEXIST) { ++ fd = open(nfile, O_RDWR); ++ if (fd >= 0) ++ break; ++ } ++ err = -errno; ++ goto out; + } + } + } +-- +2.29.2 + + +From 12487b40b6e7230a003eb6e4333ee820d8578592 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Fri, 11 Dec 2020 23:55:34 +0100 +Subject: [PATCH 12/14] alsactl: Remove asound.state file check from + alsa-restore.service again + +We added the check of asound.state file presence some time ago to +assure that alsactl gets called only if the state file is already +present. Since then, the situation has changed significantly: +e.g. now alsactl does initialize if the state file isn't present, and +the same alsa-restore.service is used to save the state. This means +that we should start this service no matter the state file exists at +the boot time or not. So, revert the old change again. + +Signed-off-by: Takashi Iwai +--- + alsactl/alsa-restore.service.in | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/alsactl/alsa-restore.service.in b/alsactl/alsa-restore.service.in +index a84c2e8..80fd5fd 100644 +--- a/alsactl/alsa-restore.service.in ++++ b/alsactl/alsa-restore.service.in +@@ -7,7 +7,6 @@ + Description=Save/Restore Sound Card State + ConditionPathExists=!@daemonswitch@ + ConditionPathExistsGlob=/dev/snd/control* +-ConditionPathExists=@asoundrcfile@ + + [Service] + Type=oneshot +-- +2.29.2 + + +From 76bc37aeb77d51f995e223582d25335cd98b2eea Mon Sep 17 00:00:00 2001 +From: Jaroslav Kysela +Date: Sun, 3 Jan 2021 17:19:03 +0100 +Subject: [PATCH 13/14] aplay: add test code for snd_pcm_status() to + --test-position + +We need to test also snd_pcm_status() values. + +Signed-off-by: Jaroslav Kysela +--- + aplay/aplay.c | 48 ++++++++++++++++++++++++++++++++++++++---------- + 1 file changed, 38 insertions(+), 10 deletions(-) + +diff --git a/aplay/aplay.c b/aplay/aplay.c +index d385da2..5a6d5c3 100644 +--- a/aplay/aplay.c ++++ b/aplay/aplay.c +@@ -1953,22 +1953,38 @@ static void do_test_position(void) + static snd_pcm_sframes_t minavail, mindelay; + static snd_pcm_sframes_t badavail = 0, baddelay = 0; + snd_pcm_sframes_t outofrange; +- snd_pcm_sframes_t avail, delay; ++ snd_pcm_sframes_t avail, delay, savail, sdelay; ++ snd_pcm_status_t *status; + int err; + ++ snd_pcm_status_alloca(&status); + err = snd_pcm_avail_delay(handle, &avail, &delay); + if (err < 0) + return; ++ err = snd_pcm_status(handle, status); ++ if (err < 0) ++ return; ++ savail = snd_pcm_status_get_avail(status); ++ sdelay = snd_pcm_status_get_delay(status); + outofrange = (test_coef * (snd_pcm_sframes_t)buffer_frames) / 2; + if (avail > outofrange || avail < -outofrange || + delay > outofrange || delay < -outofrange) { +- badavail = avail; baddelay = delay; +- availsum = delaysum = samples = 0; +- maxavail = maxdelay = 0; +- minavail = mindelay = buffer_frames * 16; +- fprintf(stderr, _("Suspicious buffer position (%li total): " +- "avail = %li, delay = %li, buffer = %li\n"), +- ++counter, (long)avail, (long)delay, (long)buffer_frames); ++ badavail = avail; baddelay = delay; ++ availsum = delaysum = samples = 0; ++ maxavail = maxdelay = 0; ++ minavail = mindelay = buffer_frames * 16; ++ fprintf(stderr, _("Suspicious buffer position (%li total): " ++ "avail = %li, delay = %li, buffer = %li\n"), ++ ++counter, (long)avail, (long)delay, (long)buffer_frames); ++ } else if (savail > outofrange || savail < -outofrange || ++ sdelay > outofrange || sdelay < -outofrange) { ++ badavail = savail; baddelay = sdelay; ++ availsum = delaysum = samples = 0; ++ maxavail = maxdelay = 0; ++ minavail = mindelay = buffer_frames * 16; ++ fprintf(stderr, _("Suspicious status buffer position (%li total): " ++ "avail = %li, delay = %li, buffer = %li\n"), ++ ++counter, (long)savail, (long)sdelay, (long)buffer_frames); + } else if (verbose) { + time(&now); + if (tmr == (time_t) -1) { +@@ -1979,19 +1995,27 @@ static void do_test_position(void) + } + if (avail > maxavail) + maxavail = avail; ++ if (savail > maxavail) ++ maxavail = savail; + if (delay > maxdelay) + maxdelay = delay; ++ if (sdelay > maxdelay) ++ maxdelay = sdelay; + if (avail < minavail) + minavail = avail; ++ if (savail < minavail) ++ minavail = savail; + if (delay < mindelay) + mindelay = delay; ++ if (sdelay < mindelay) ++ mindelay = sdelay; + availsum += avail; + delaysum += delay; + samples++; +- if (avail != 0 && now != tmr) { ++ if ((maxavail != 0 || maxdelay != 0) && now != tmr) { + fprintf(stderr, "BUFPOS: avg%li/%li " + "min%li/%li max%li/%li (%li) (%li:%li/%li)\n", +- (long)(availsum / samples), ++ (long)(availsum / samples), + (long)(delaysum / samples), + (long)minavail, (long)mindelay, + (long)maxavail, (long)maxdelay, +@@ -2000,6 +2024,10 @@ static void do_test_position(void) + tmr = now; + } + } ++ if (verbose == 1) { ++ fprintf(stderr, _("Status(R/W) (standalone avail=%li delay=%li):\n"), (long)avail, (long)delay); ++ snd_pcm_status_dump(status, log); ++ } + } + + /* +-- +2.29.2 + + +From 3980fe71c9795271639239ad8fa982a59de8ff1f Mon Sep 17 00:00:00 2001 +From: Jaroslav Kysela +Date: Mon, 4 Jan 2021 12:13:03 +0100 +Subject: [PATCH 14/14] aplay: add avail > delay checks to --test-position + +Signed-off-by: Jaroslav Kysela +--- + aplay/aplay.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/aplay/aplay.c b/aplay/aplay.c +index 5a6d5c3..b75be6c 100644 +--- a/aplay/aplay.c ++++ b/aplay/aplay.c +@@ -1985,6 +1985,14 @@ static void do_test_position(void) + fprintf(stderr, _("Suspicious status buffer position (%li total): " + "avail = %li, delay = %li, buffer = %li\n"), + ++counter, (long)savail, (long)sdelay, (long)buffer_frames); ++ } else if (avail > delay) { ++ fprintf(stderr, _("Suspicious buffer position avail > delay (%li total): " ++ "avail = %li, delay = %li\n"), ++ ++counter, (long)avail, (long)delay); ++ } else if (savail > sdelay) { ++ fprintf(stderr, _("Suspicious status buffer position avail > delay (%li total): " ++ "avail = %li, delay = %li\n"), ++ ++counter, (long)savail, (long)sdelay); + } else if (verbose) { + time(&now); + if (tmr == (time_t) -1) { +-- +2.29.2 + diff --git a/SPECS/alsa-utils.spec b/SPECS/alsa-utils.spec index f4246bf..7ce6b02 100644 --- a/SPECS/alsa-utils.spec +++ b/SPECS/alsa-utils.spec @@ -5,7 +5,7 @@ Summary: Advanced Linux Sound Architecture (ALSA) utilities Name: alsa-utils Version: %{baseversion}%{?fixversion} -Release: 1%{?dist} +Release: 2%{?dist} License: GPLv2+ Group: Applications/Multimedia URL: http://www.alsa-project.org/ @@ -16,6 +16,7 @@ Source10: alsa.rules Source11: alsactl.conf Source20: alsa-restore.service Source22: alsa-state.service +Patch1: alsa-git.patch BuildRequires: gcc BuildRequires: alsa-lib-devel >= %{baseversion} @@ -64,6 +65,7 @@ Architecture (ALSA) framework and Fast Fourier Transform library. %prep %setup -q -n %{name}-%{version} +%patch1 -p1 -b .alsa-git %build %configure CFLAGS="$RPM_OPT_FLAGS -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" --disable-alsaconf \ @@ -190,6 +192,10 @@ fi %systemd_postun_with_restart alsa-state.service %changelog +* Mon Jun 8 2020 Jaroslav Kysela - 1.2.4-2 +- Updated to 1.2.4 +- Apply fixes from recent upstream + * Mon Jun 8 2020 Jaroslav Kysela - 1.2.3-1 - Updated to 1.2.3