#!/bin/bash

SESSIONDIR=$HOME/.valgrind-session
OUTPREFIX=vgout

# Try to make sure valgrind processes have exited

let tries=0

# So lame.

while ps aux | grep -v grep | grep -v gnome-valgrind- | grep ^$USER | grep valgrind >/dev/null 2>&1; do
  let tries=$tries+1
  if (($tries > 12)); then
    kill -9 $(ps aux | grep -v grep | grep -v gnome-valgrind- | grep ^$USER | grep valgrind | sed 's/[0-9A-Za-z]\+ \+\([0-9]\+\).*/\1/') >/dev/null 2>&1
  else
    kill $(ps aux | grep -v grep | grep -v gnome-valgrind- | grep ^$USER | grep valgrind | sed 's/[0-9A-Za-z]\+ \+\([0-9]\+\).*/\1/') >/dev/null 2>&1
  fi

  sleep 5
done

# Find a unique name

JOINED_OUTPUT=$HOME/valgrind-session
let ORDINAL=0

while [ -e $JOINED_OUTPUT.$ORDINAL ]; do
  let ORDINAL=$ORDINAL+1
done

# Join output and remove everything that's not a "definitely lost" message

cat $SESSIONDIR/$OUTPREFIX.* | \
   sed -e '/^==[0-9]\+== \+.\+$/{H;$!d;}' \
       -e 'x;/blocks are definitely lost/!d;' > \
   $JOINED_OUTPUT.$ORDINAL

rm -f $SESSIONDIR/$OUTPREFIX.*
