1######################################################################## 2# # 3# This software is part of the ast package # 4# Copyright (c) 1982-2012 AT&T Intellectual Property # 5# and is licensed under the # 6# Eclipse Public License, Version 1.0 # 7# by AT&T Intellectual Property # 8# # 9# A copy of the License is available at # 10# http://www.eclipse.org/org/documents/epl-v10.html # 11# (with md5 checksum b35adb5213ca9657e911e9befb180842) # 12# # 13# Information and Software Systems Research # 14# AT&T Research # 15# Florham Park NJ # 16# # 17# David Korn <dgkorn@gmail.com> # 18# # 19######################################################################## 20builtin vmstate 2>/dev/null || exit 0 21 22function err_exit 23{ 24 print -u2 -n "\t" 25 print -u2 -r ${Command}[$1]: "${@:2}" 26 let Errors+=1 27} 28alias err_exit='err_exit $LINENO' 29 30Command=${0##*/} 31integer Errors=0 32 33# test for variable reset leak # 34 35function test_reset 36{ 37 integer i n=$1 38 39 for ((i = 0; i < n; i++)) 40 do u=$i 41 done 42} 43 44n=1000 45 46# one round to get to steady state -- sensitive to -x 47 48test_reset $n 49a=0$(vmstate --format='+%(size)u') 50b=0$(vmstate --format='+%(size)u') 51 52test_reset $n 53a=0$(vmstate --format='+%(size)u') 54test_reset $n 55b=0$(vmstate --format='+%(size)u') 56 57if (( b > a )) 58then err_exit "variable value reset memory leak -- $((b-a)) bytes after $n iterations" 59fi 60 61# buffer boundary tests 62 63for exp in 65535 65536 64do got=$($SHELL -c 'x=$(printf "%.*c" '$exp' x); print ${#x}' 2>&1) 65 [[ $got == $exp ]] || err_exit "large command substitution failed -- expected $exp, got $got" 66done 67 68data="(v=;sid=;di=;hi=;ti='1328244300';lv='o';id='172.3.161.178';var=(k='conn_num._total';u=;fr=;l='Number of Connections';n='22';t='number';))" 69read -C stat <<< "$data" 70for ((i=0; i < 1; i++)) 71do print -r -- "$data" 72done | while read -u$n -C stat 73 do : 74 done {n}<&0- 75a=0$(vmstate --format='+%(size)u') 76for ((i=0; i < 500; i++)) 77do print -r -- "$data" 78done | while read -u$n -C stat 79 do : 80 done {n}<&0- 81b=0$(vmstate --format='+%(size)u') 82(( b > a )) && err_exit 'memory leak with read -C when deleting compound variable' 83 84read -C stat <<< "$data" 85a=0$(vmstate --format='+%(size)u') 86for ((i=0; i < 500; i++)) 87do read -C stat <<< "$data" 88done 89b=0$(vmstate --format='+%(size)u') 90(( b > a )) && err_exit 'memory leak with read -C when using <<<' 91 92exit $((Errors<125?Errors:125)) 93