From: Chase Douglas <chase.doug...@canonical.com> Sleep hooks are dependency ordered, so we must bail if any hook fails. However, powersave hooks generally do not have any dependencies. It makes more sense to allow all powersave hooks to run even if one of them fails.
Signed-off-by: Chase Douglas <chase.doug...@canonical.com> --- pm/pm-functions.in | 18 +++++++++++------- src/pm-action.in | 6 +++--- src/pm-powersave.in | 6 +++--- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/pm/pm-functions.in b/pm/pm-functions.in index dfbc59f..0862520 100644 --- a/pm/pm-functions.in +++ b/pm/pm-functions.in @@ -193,11 +193,14 @@ hook_ok() } _run_hook() { - # $1 = hook to run + # $1 = "inhibit" or "advance" further hooks after a hook failure + # $2 = hook to run # rest of args passed to hook unchanged. + local do_inhibit=$1 + shift log -n "$*:" hook_ok "$1" && "$@" - hook_exit_status $? && LAST_HOOK="${1##*/}" || inhibit + hook_exit_status $? && LAST_HOOK="${1##*/}" || [ "$do_inhibit" = "inhibit" ] && inhibit } if profiling; then @@ -210,7 +213,8 @@ fi _run_hooks() { # $1 = type of hook to find. # $2 = paramaters to pass to hooks. - # $3 = if present and equal to "reverse", run hooks backwards. + # $3 = "inhibit" or "advance" further hooks after a hook failure + # $4 = if present and equal to "reverse", run hooks backwards. # Currently only power and sleep are meaningful. local syshooks="${PM_UTILS_ETCDIR}/$1.d" local phooks="${PM_UTILS_LIBDIR}/$1.d" @@ -223,25 +227,25 @@ _run_hooks() { local nifs=" " IFS="${nifs}" # tolerate spaces in filenames. - [ "$3" = "reverse" ] && sort="sort -r" + [ "$4" = "reverse" ] && sort="sort -r" for base in $(IFS="${oifs}"; for f in "$syshooks/"*[!~] "$phooks/"*[!~]; do [ -O "$f" ] && echo ${f##*/} ; done | $sort | uniq) ; do IFS="${oifs}" # if we are running backwards, skip hooks that we did not # run going forwards due to a hook failing. - [ "$3" -a "$3" = "reverse" -a "$LAST_HOOK" ] && \ + [ "$4" -a "$4" = "reverse" -a "$LAST_HOOK" ] && \ [ "$base" \> "$LAST_HOOK" ] && continue # if we have already inhibited suspend/resume, # don't run any more hooks. - [ ! "$3" ] && inhibited && break + [ ! "$4" ] && inhibited && break update_parameters if [ -f "$syshooks/$base" ]; then hook="$syshooks/$base" elif [ -f "$phooks/$base" ]; then hook="$phooks/$base" fi - run_hook "$hook" $2 + run_hook $3 "$hook" $2 IFS="${nifs}" done IFS="${oifs}" diff --git a/src/pm-action.in b/src/pm-action.in index e148585..3d89ab6 100755 --- a/src/pm-action.in +++ b/src/pm-action.in @@ -37,7 +37,7 @@ help() echo "${0##*/} [options]" echo echo "Options can change how suspend or hibernate is done." - run_hooks sleep help + run_hooks sleep help advance sleep_module_help exit 0 } @@ -96,7 +96,7 @@ load_hook_parameters # run the sleep hooks log "$(date): Running hooks for $ACTION." -if run_hooks sleep "$ACTION $METHOD"; then +if run_hooks sleep "$ACTION $METHOD" inhibit; then # Sleep only if we know how and if a hook did not inhibit us. log "$(date): performing $METHOD" sync @@ -107,7 +107,7 @@ else fi log "$(date): Running hooks for $REVERSE" # run the sleep hooks in reverse with the wakeup action -if run_hooks sleep "$REVERSE $METHOD" reverse; then +if run_hooks sleep "$REVERSE $METHOD" inhibit reverse; then log "$(date): Finished." else exit $((r+1)) diff --git a/src/pm-powersave.in b/src/pm-powersave.in index 08e4f5b..e0a4b8d 100644 --- a/src/pm-powersave.in +++ b/src/pm-powersave.in @@ -42,14 +42,14 @@ load_hook_blacklist if [ "$1" = "true" -o "$1" = "false" ] ; then init_logfile "${PM_LOGFILE}" - run_hooks power "$1" + run_hooks power "$1" advance elif [ ! "$1" ]; then # no arg? Guess! init_logfile "${PM_LOGFILE}" if on_ac_power; then - run_hooks power false; + run_hooks power false advance; else - run_hooks power true; + run_hooks power true advance; fi else echo "Argument needs to be true or false" >&2 -- 1.6.3.3 _______________________________________________ Pm-utils mailing list Pm-utils@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/pm-utils