1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
#!/bin/sh
# PCP QA Test No. 1199
# expose pmcd mem leak after change in libpcp context management
#
# Copyright (c) 2017 Ken McDonell. All Rights Reserved.
#
seq=`basename $0`
echo "QA output created by $seq"
# get standard environment, filters and checks
. ./common.product
. ./common.filter
. ./common.check
_cleanup()
{
cd $here
_restore_auto_restart pmcd
$sudo rm -rf $tmp $tmp.*
}
status=1 # failure is the default!
trap "_cleanup; exit \$status" 0 1 2 3 15
_stop_auto_restart pmcd
if ! _service pmcd restart 2>&1; then _exit 1; fi | _filter_pcp_restart
echo "initial pminfo ..." >>$seq_full
pminfo -v -b 1000 >/dev/null 2>>$seq_full
echo "done." >>$seq_full
# real QA test starts here
pmprobe -v pmcd.datasize | tee -a $seq_full >$tmp.tmp
start=`cat $tmp.tmp | awk '{print $3}'`
echo "start=$start" >>$seq_full
src/churnctx -i bin-100,bin-200,bin-300,bin-400,bin-900 -s 1000 -t 0 sample.bin sample.long.one >$tmp.out 2>$tmp.err
echo >>$seq_full
echo '=== stderr' >>$seq_full
cat $tmp.err >>$seq_full
echo >>$seq_full
echo '=== stdout' >>$seq_full
cat $tmp.out >>$seq_full
grep sample $tmp.out \
| sort \
| uniq -c \
| sed -e 's/^ *//'
pmprobe -v pmcd.datasize | tee -a $seq_full >$tmp.tmp
end=`cat $tmp.tmp | awk '{print $3}'`
echo "end=$start" >>$seq_full
# we have to be a little tolerant here ... there are a number of
# deferred initializations that might not have been done at the time
# of the first pmprobe, so allow a 128K (32 pages most likely) slop.
#
# The real leaks this test is designed for should exceed this easily.
#
if [ "$end" -gt "`expr $start + 128`" ]
then
echo "Arrgh ... pmcd memory leak (>128Kbytes) from $start to $end during test"
fi
# success, all done
status=0
exit
|