tFIX (tries) #77: slam wasn't slamming - tomb - the crypto undertaker
 (HTM) git clone git://parazyd.org/tomb.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit d57994fcc3a0339060541069b0b3b2d88a5e2fdb
 (DIR) parent 86fc6e67a81bb671d034c3edcea80eeb0129d4c9
 (HTM) Author: boyska <piuttosto@logorroici.org>
       Date:   Thu,  2 Feb 2012 00:31:44 +0100
       
       FIX (tries) #77: slam wasn't slamming
       
       That's because fuser behaves differently on debian.
       (Why, debian, why???)
       
       Diffstat:
         M .gitignore                          |       1 +
         M src/tomb                            |      25 ++++++++++++++++++++-----
       
       2 files changed, 21 insertions(+), 5 deletions(-)
       ---
 (DIR) diff --git a/.gitignore b/.gitignore
       t@@ -28,3 +28,4 @@ tags
        doc/web/public
        doc/web/dyne
        share/gtkrc
       +.*.sw?
 (DIR) diff --git a/src/tomb b/src/tomb
       t@@ -949,9 +949,25 @@ mount_tomb() {
        # Kill all processes using the tomb
        slam_tomb() {
            # $1 = tomb mount point
       -    for s in INT TERM HUP KILL; do
       -        fuser -s -m "$1" || return 0
       -        fuser -s -m "$1" -k -M -$s && { option_is_set -f || sleep 3 }
       +    if [[ -z `fuser -m "$1" 2> /dev/null` ]]; then
       +        return 0
       +    fi
       +    #Note: shells are NOT killed by INT or TERM, but they are killed by HUP
       +    for s in TERM HUP KILL; do
       +        xxx "Sending $s to processes inside the tomb:"
       +        if option_is_set -D; then
       +            ps -fp `fuser -m /media/a.tomb 2> /dev/null`|
       +            while read line; do
       +                xxx $line
       +            done
       +        fi
       +        fuser -s -m "$1" -k -M -$s
       +        if [[ -z `fuser -m "$1" 2> /dev/null` ]]; then
       +            return 0
       +        fi
       +        if ! option_is_set -f; then
       +            sleep 3
       +        fi
            done
            return 1
        }
       t@@ -1030,8 +1046,7 @@ umount_tomb() {
            if [ $SLAM ]; then
                _success "Slamming tomb $tombname mounted on $tombmount"
                _message "Kill all processes busy inside the tomb"
       -        slam_tomb "$tombmount"
       -        if [[ $? == 1 ]]; then
       +        if ! slam_tomb "$tombmount"; then
                    _warning "Cannot slam the tomb $tombname"
                    return 1
                fi