diff options
-rwxr-xr-x | source4/script/tests/selftest.sh | 6 | ||||
-rwxr-xr-x | source4/script/tests/test_functions.sh | 16 |
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_ |