diff options
Diffstat (limited to 'source/l/alsa-lib')
-rwxr-xr-x | source/l/alsa-lib/alsa-lib.SlackBuild | 23 | ||||
-rw-r--r-- | source/l/alsa-lib/alsa-lib.fdba9e1bad8f769a6137e565471f0227f23a3132.diff | 102 | ||||
-rw-r--r-- | source/l/alsa-lib/asound.conf | 4 | ||||
-rw-r--r-- | source/l/alsa-lib/doinst.sh | 14 |
4 files changed, 136 insertions, 7 deletions
diff --git a/source/l/alsa-lib/alsa-lib.SlackBuild b/source/l/alsa-lib/alsa-lib.SlackBuild index 441ce1b8..1a94182f 100755 --- a/source/l/alsa-lib/alsa-lib.SlackBuild +++ b/source/l/alsa-lib/alsa-lib.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2008, 2009, 2010, 2011, 2012, 2013 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2008, 2009, 2010, 2011, 2012, 2013, 2015, 2016 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -22,14 +22,14 @@ VERSION=${VERSION:-$(echo alsa-lib-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} -BUILD=${BUILD:-1} +BUILD=${BUILD:-2} NUMJOBS=${NUMJOBS:-" -j7 "} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then case "$( uname -m )" in - i?86) export ARCH=i486 ;; + i?86) export ARCH=i586 ;; arm*) export ARCH=arm ;; # Unless $ARCH is already set, use uname -m for all other archs: *) export ARCH=$( uname -m ) ;; @@ -40,8 +40,8 @@ CWD=$(pwd) TMP=${TMP:-/tmp} PKG=$TMP/package-alsa-lib -if [ "$ARCH" = "i486" ]; then - SLKCFLAGS="-O2 -march=i486 -mtune=i686" +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "s390" ]; then SLKCFLAGS="-O2" @@ -62,6 +62,8 @@ rm -rf alsa-lib-$VERSION tar xvf $CWD/alsa-lib-$VERSION.tar.?z* || exit 1 cd alsa-lib-$VERSION || exit 1 +zcat $CWD/alsa-lib.fdba9e1bad8f769a6137e565471f0227f23a3132.diff.gz | patch -p1 --verbose || exit 1 + chown -R root:root . find . \ \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \ @@ -72,14 +74,20 @@ find . \ CFLAGS="$SLKCFLAGS" \ ./configure \ --libdir=/usr/lib${LIBDIRSUFFIX} \ - --build=$ARCH-slackware-linux + --build=$ARCH-slackware-linux || exit 1 make $NUMJOBS || exit 1 -make install DESTDIR=$PKG +make install DESTDIR=$PKG || exit 1 find $PKG | xargs file | grep -e "executable" -e "shared object" \ | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null +# Redirect to PulseAudio: +mkdir $PKG/etc +cp -a $CWD/asound.conf $PKG/etc/asound.conf.new +chmod 644 $PKG/etc/asound.conf.new +chown root:root $PKG/etc/asound.conf.new + # TODO? # ( cd src/pcm/ext # make jack @@ -102,6 +110,7 @@ fi mkdir -p $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc +zcat $CWD/doinst.sh.gz > $PKG/install/doinst.sh cd $PKG /sbin/makepkg -l y -c n $TMP/alsa-lib-$VERSION-$ARCH-$BUILD.txz diff --git a/source/l/alsa-lib/alsa-lib.fdba9e1bad8f769a6137e565471f0227f23a3132.diff b/source/l/alsa-lib/alsa-lib.fdba9e1bad8f769a6137e565471f0227f23a3132.diff new file mode 100644 index 00000000..b5aad2bb --- /dev/null +++ b/source/l/alsa-lib/alsa-lib.fdba9e1bad8f769a6137e565471f0227f23a3132.diff @@ -0,0 +1,102 @@ +From: Takashi Iwai <tiwai@suse.de> +Date: Thu, 14 Apr 2016 15:33:03 +0000 (+0200) +Subject: pcm: Fallback open as the first instance for dmix & co +X-Git-Url: http://git.alsa-project.org/?p=alsa-lib.git;a=commitdiff_plain;h=fdba9e1bad8f769a6137e565471f0227f23a3132;hp=e57b521c61f0df14b660ce6ba8c5009a63f5b115 + +pcm: Fallback open as the first instance for dmix & co + +dmix and other PCM plugins tries to open a secondary stream with +O_APPEND flag when the shmem was already attached by another. +However, when another streams have been already closed after the +shmem check, this open may return the error EBADFD, since the kernel +accepts O_APPEND only for the secondary streams. + +This patch adds a workaround for such a case. It just retries opening +the stream as the first instance (i.e. without O_APPEND flag). +This is basically safe behavior (the kernel takes care of races), even +we may do this even unconditionally. But it's bad from the +performance POV, so we do it only when really needed. + +Reported-by: Lars Lindqvist <lars.lindqvist@yandex.ru> +Signed-off-by: Takashi Iwai <tiwai@suse.de> +--- + +diff --git a/src/pcm/pcm_dmix.c b/src/pcm/pcm_dmix.c +index b26a5c7..007d356 100644 +--- a/src/pcm/pcm_dmix.c ++++ b/src/pcm/pcm_dmix.c +@@ -1020,6 +1020,7 @@ int snd_pcm_dmix_open(snd_pcm_t **pcmp, const char *name, + dmix->max_periods = opts->max_periods; + dmix->sync_ptr = snd_pcm_dmix_sync_ptr; + ++ retry: + if (first_instance) { + /* recursion is already checked in + snd_pcm_direct_get_slave_ipc_offset() */ +@@ -1076,6 +1077,13 @@ int snd_pcm_dmix_open(snd_pcm_t **pcmp, const char *name, + SND_PCM_APPEND, + NULL); + if (ret < 0) { ++ /* all other streams have been closed; ++ * retry as the first instance ++ */ ++ if (ret == -EBADFD) { ++ first_instance = 1; ++ goto retry; ++ } + SNDERR("unable to open slave"); + goto _err; + } +diff --git a/src/pcm/pcm_dshare.c b/src/pcm/pcm_dshare.c +index 58e47bb..adb3587 100644 +--- a/src/pcm/pcm_dshare.c ++++ b/src/pcm/pcm_dshare.c +@@ -690,6 +690,7 @@ int snd_pcm_dshare_open(snd_pcm_t **pcmp, const char *name, + break; + } + ++ retry: + first_instance = ret = snd_pcm_direct_shm_create_or_connect(dshare); + if (ret < 0) { + SNDERR("unable to create IPC shm instance"); +@@ -758,6 +759,13 @@ int snd_pcm_dshare_open(snd_pcm_t **pcmp, const char *name, + SND_PCM_APPEND, + NULL); + if (ret < 0) { ++ /* all other streams have been closed; ++ * retry as the first instance ++ */ ++ if (ret == -EBADFD) { ++ first_instance = 1; ++ goto retry; ++ } + SNDERR("unable to open slave"); + goto _err; + } +diff --git a/src/pcm/pcm_dsnoop.c b/src/pcm/pcm_dsnoop.c +index 576c35b..8ff0ba5 100644 +--- a/src/pcm/pcm_dsnoop.c ++++ b/src/pcm/pcm_dsnoop.c +@@ -583,6 +583,7 @@ int snd_pcm_dsnoop_open(snd_pcm_t **pcmp, const char *name, + break; + } + ++ retry: + first_instance = ret = snd_pcm_direct_shm_create_or_connect(dsnoop); + if (ret < 0) { + SNDERR("unable to create IPC shm instance"); +@@ -651,6 +652,13 @@ int snd_pcm_dsnoop_open(snd_pcm_t **pcmp, const char *name, + SND_PCM_APPEND, + NULL); + if (ret < 0) { ++ /* all other streams have been closed; ++ * retry as the first instance ++ */ ++ if (ret == -EBADFD) { ++ first_instance = 1; ++ goto retry; ++ } + SNDERR("unable to open slave"); + goto _err; + } + diff --git a/source/l/alsa-lib/asound.conf b/source/l/alsa-lib/asound.conf new file mode 100644 index 00000000..d8c8c317 --- /dev/null +++ b/source/l/alsa-lib/asound.conf @@ -0,0 +1,4 @@ +# ALSA system-wide config file +# By default, redirect to PulseAudio: +pcm.default pulse +ctl.default pulse diff --git a/source/l/alsa-lib/doinst.sh b/source/l/alsa-lib/doinst.sh new file mode 100644 index 00000000..35c6f596 --- /dev/null +++ b/source/l/alsa-lib/doinst.sh @@ -0,0 +1,14 @@ +config() { + NEW="$1" + OLD="$(dirname $NEW)/$(basename $NEW .new)" + # If there's no config file by that name, mv it over: + if [ ! -r $OLD ]; then + mv $NEW $OLD + elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then + # toss the redundant copy + rm $NEW + fi + # Otherwise, we leave the .new copy for the admin to consider... +} + +config etc/asound.conf.new |