--- alsasound.initd 2009-01-11 23:30:04.000000000 +0100 +++ alsasound 2009-01-11 23:28:39.000000000 +0100 @@ -81,26 +81,26 @@ } unload_modules_24() { - local LOADED_MODULES="$(lsmod | sed -n -e 's/^\(snd[^ ]*\) .*/\1/p')" + local LOADED_MODULES="$(lsmod | sort -n -k 3 | sed -n -e 's/^\(snd[^ ]*\) .*/\1/p')" local MODULE for MODULE in ${LOADED_MODULES} ; do - rmmod "${MODULE}" + modprobe -r "${MODULE}" done - rmmod soundcore 2>/dev/null - rmmod gameport 2>/dev/null + modprobe -r soundcore 2>/dev/null + modprobe -r gameport 2>/dev/null lsmod | grep -vq '^snd' } unload_modules_recursive() { - local revdeps="$(lsmod | sed -n -e "s/,/ /g" -e "s/^$1 *[0-9]* *[0-9]* \(.*\)/\1/p")" + local revdeps="$(lsmod | sort -n -k 3 | sed -n -e "s/,/ /g" -e "s/^$1 *[0-9]* *[0-9]* \(.*\)/\1/p")" for module in ${revdeps} ; do unload_modules_recursive "${module}" done vebegin "Unloading: $1" - rmmod --wait "$1" + modprobe -r "$1" veend $? } @@ -110,7 +110,7 @@ lsmod | grep -q "^snd[[:space:]]" && unload_modules_recursive snd # Then find the remaining ones, and handle them too. - for module in $(lsmod | sed -n -e 's/^\(snd[^ ]*\) .*/\1/p'); do + for module in $(lsmod | sort -n -k 3 | sed -n -e 's/^\(snd[^ ]*\) .*/\1/p'); do unload_modules_recursive "${module}" done