summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsource4/script/tests/selftest.sh6
-rwxr-xr-xsource4/script/tests/test_functions.sh16
2 files changed, 21 insertions, 1 deletions
diff --git a/source4/script/tests/selftest.sh b/source4/script/tests/selftest.sh
index 70a91d4697..92fba70c4a 100755
--- a/source4/script/tests/selftest.sh
+++ b/source4/script/tests/selftest.sh
@@ -247,7 +247,11 @@ exit $?
) 9>$SMBD_TEST_FIFO
totalfailed=$?
-kill `cat $PIDDIR/smbd.pid`
+smbd_PID=`cat $PIDDIR/smbd.pid`
+waitforpid $smbd_PID 20 || {
+ echo "smbd process $1 took more than 20 seconds to exit, killing"
+ kill -9 $smbd_PID
+}
if [ "$TEST_LDAP"x = "yesx" ]; then
if test -z "$FEDORA_DS_PREFIX"; then
diff --git a/source4/script/tests/test_functions.sh b/source4/script/tests/test_functions.sh
index 42c7d614d3..9b869782cd 100755
--- a/source4/script/tests/test_functions.sh
+++ b/source4/script/tests/test_functions.sh
@@ -113,6 +113,22 @@ EOF
exit $failed
}
+# wait for a pid with given timeout
+# returns 1 if it timed out, 0 if the process exited itself
+waitforpid() {
+ pid=$1
+ timeout=$2 # in seconds
+ _wcount=0
+ while kill -0 $pid 2> /dev/null; do
+ sleep 1;
+ _wcount=`expr $_wcount + 1`
+ if [ $_wcount -eq $timeout ]; then
+ return "1";
+ fi
+ done
+ return "0";
+}
+
if [ -z "$VALGRIND" ]; then
MALLOC_CHECK_=2
export MALLOC_CHECK_