--- alsasound 2009-03-26 21:23:14.000000000 -0400 +++ alsasound.new 2009-03-26 21:23:27.000000000 -0400 @@ -5,6 +5,7 @@ alsastatedir=/var/lib/alsa alsascrdir=/etc/alsa.d +loaded_modules="" opts="save restore" @@ -46,6 +47,7 @@ if ! grep -q "^${DMOD} " /proc/modules ; then ebegin "Loading: ${DRIVER}" modprobe ${DRIVER} + loaded_modules="${DRIVER} ${loaded_modules}" eend $? fi done @@ -58,6 +60,7 @@ if ! grep -q "^${DMOD} " /proc/modules ; then ebegin "Loading: ${SEQUENCER}" modprobe ${SEQUENCER} + loaded_modules="${SEQUENCER} ${loaded_modules}" eend $? fi done @@ -78,6 +81,18 @@ eerror "ERROR: Failed to load necessary drivers" return 1 fi + + mkdir -p /var/run/alsasound + if [ ! -d /var/run/alsasound ] ; then + eerror "ERROR: Failed to create alsasound directory" + return 1 + fi + + echo "${loaded_modules}" > /var/run/alsasound/alsa.modules + + if [ ! -f /var/run/alsasound/alsa.modules ] ; then + eeror "ERROR: Unable to create alsa.modules" + fi } unload_modules_24() { @@ -105,6 +120,12 @@ } unload_modules_26() { + # ensure drivers and sequencers are unloaded before everything else. + # see Gentoo bug: 232875 + for module in `cat /var/run/alsasound/alsa.modules`; do + unload_modules_recursive "${module}" + done + # First of all, remove the snd module and all the modules depending # on it, this should remove already most of ALSA modules. lsmod | grep -q "^snd[[:space:]]" && unload_modules_recursive snd @@ -114,6 +135,7 @@ unload_modules_recursive "${module}" done + rm -rf /var/run/alsasound lsmod | grep -vq "^snd" }