# This is a shell function library sourced by some Open vSwitch scripts.
# It is not intended to be invoked on its own.
-# Copyright (C) 2009, 2010, 2011, 2012 Nicira Networks, Inc.
+# Copyright (C) 2009, 2010, 2011, 2012 Nicira, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
start_daemon () {
priority=$1
- shift
+ wrapper=$2
+ shift; shift
daemon=$1
+ strace=""
# drop core files in a sensible place
test -d "$DAEMON_CWD" || install -d -m 755 -o root -g root "$DAEMON_CWD"
set "$@" --pidfile="$rundir/$daemon.pid"
set "$@" --detach --monitor
+ # wrapper
+ case $wrapper in
+ valgrind)
+ if (valgrind --version) > /dev/null 2>&1; then
+ set valgrind -q --leak-check=full --time-stamp=yes \
+ --log-file="$logdir/$daemon.valgrind.log.%p" "$@"
+ else
+ log_failure_msg "valgrind not installed, running $daemon without it"
+ fi
+ ;;
+ strace)
+ if (strace -V) > /dev/null 2>&1; then
+ strace="strace -tt -T -s 256 -ff"
+ if (strace -DV) > /dev/null 2>&1; then
+ # Has the -D option.
+ set $strace -D -o "$logdir/$daemon.strace.log" "$@"
+ strace=""
+ fi
+ else
+ log_failure_msg "strace not installed, running $daemon without it"
+ fi
+ ;;
+ '')
+ ;;
+ *)
+ log_failure_msg "unknown wrapper $wrapper, running $daemon without it"
+ ;;
+ esac
+
# priority
if test X"$priority" != X; then
set nice -n "$priority" "$@"
fi
action "Starting $daemon" "$@"
+
+ if test X"$strace" != X; then
+ # Strace doesn't have the -D option so we attach after the fact.
+ setsid $strace -o "$logdir/$daemon.strace.log" \
+ -p `cat $rundir/$daemon.pid` > /dev/null 2>&1 &
+ fi
}
DAEMON_CWD=/