1#!/bin/sh 2 3name=$1 4pid=$2 5 6ec=0 7 8if [ "$(uname -s)" = "Darwin" ] ; then 9 echo "leaks check on $name ($pid)" 10 leaks -exclude __CFInitialize $pid > leaks-log 2>&1 || \ 11 { echo "leaks failed: $?"; cat leaks-log; exit 1; } 12 13 env pid=${pid} \ 14 perl -e 'my $excluded = 0; my $num = -1; while (<>) { 15if (/Process $ENV{pid}: (\d+) leaks for \d+ total leaked bytes/) { $num = $1;} 16if (/(\d+) leaks excluded/) { $excluded = $1;} 17} 18exit 1 if ($num != 0 && $num != $excluded); 19exit 0;' leaks-log || \ 20 { echo "Memory leak in $name" ; echo ""; cat leaks-log; ec=1; } 21 22 # [ "$ec" != "0" ] && { env PS1=": leaks-debugger !!!! ; " bash ; } 23 24fi 25 26kill $pid 27sleep 3 28kill -9 $pid 2> /dev/null 29 30rm -f leaks-log 31 32exit $ec 33