selftest: Support multiple instances of $LISTOPT.
[samba.git] / selftest / in_screen
index 0704ae53909f9767e660e1338e6bf088f72a5bf1..8bfbc0101b0c783020a5b213304bc4a76dbe52bd 100755 (executable)
@@ -1,23 +1,48 @@
-#!/bin/bash
+#!/usr/bin/env bash
 
 export TMPDIR="$SELFTEST_TMPDIR"
 
 SERVERNAME="$ENVNAME"
 [ -z "$SERVERNAME" ] && SERVERNAME="base"
 basedir=$TMPDIR
+osname=$(uname)
+if [ "$osname" = "Linux" ]; then
+       vars=$(mktemp)
+else
+       vars=$(mktemp -t tmpsmb)
+       function seq() {
+               dpt=$1
+               end=$2
+               while [ $dpt -le $end ]; do
+                       echo "$dpt"
+                       dpt=$(( $dpt + 1))
+               done
+       }
+fi
+
+[ -r $basedir/$SERVERNAME.pid ] && {
+    for i in $(seq 2 100); do
+       if [ ! -r "$basedir/${SERVERNAME}-$i.pid" ]; then
+           SERVERNAME="${SERVERNAME}-$i"
+           break
+       fi
+    done
+}
+
+rm -f $basedir/$SERVERNAME.*
 
 # set most of the environment vars we have in the screen session too
 _ENV=""
-vars=$(mktemp)
 printenv |
   egrep -v '^TERMCAP|^WINDOW|^SHELL|^STY|^SHLVL|^SAMBA_VALGRIND|\$' |
   egrep '^[A-Z]' |
   sed "s/\(^[^=]*=\)\(.*\)/export \1'\2'/g" > $basedir/$SERVERNAME.vars
 
 cat <<EOF > $basedir/$SERVERNAME.launch
+cd $PWD
  echo \$\$ > $basedir/$SERVERNAME.pid
  . $basedir/$SERVERNAME.vars
- echo "\$(date) starting $@" >> $basedir/$SERVERNAME.log
+ echo "\$(date) starting $SERVERNAME" >> $basedir/$SERVERNAME.log
  $@
  echo \$? > $basedir/$SERVERNAME.status
  read parent < $basedir/$SERVERNAME.parent.pid
@@ -26,17 +51,18 @@ EOF
 pid=$$
 
 cleanup() {
+    trap "exit 1" SIGINT SIGTERM SIGPIPE
     [ -r $basedir/$SERVERNAME.status ] && {
        read status < $basedir/$SERVERNAME.status
        echo "$(date) samba exited with status $status" >> $basedir/$SERVERNAME.log
        exit $status
     }
     read pid < $basedir/$SERVERNAME.pid
-    echo "$(date) Killing samba pid $pid" >> $basedir/$SERVERNAME.log
+    echo "$(date) Killing samba pid $pid from $$" >> $basedir/$SERVERNAME.log
     if [ "$pid" = "$$" ]; then
        exit 1
     fi
-    kill $pid 2>&1
+    kill -9 $pid 2>&1
     exit 1
 }