summaryrefslogtreecommitdiffstats
path: root/stap-server
diff options
context:
space:
mode:
authorFrank Ch. Eigler <fche@elastic.org>2008-08-11 17:34:47 -0400
committerFrank Ch. Eigler <fche@elastic.org>2008-08-11 17:34:47 -0400
commit42e740602dbb7960e11b0bbf9053e95e8a1cb1e5 (patch)
treeaa32f56c7c5b1838e9d80bec2c15325c71742660 /stap-server
parent3213d0891c826f16ba727a3e863075e2922666a0 (diff)
parent79640c29c5bcf8de20f013dcc80e1a9c7a93811f (diff)
downloadsystemtap-steved-42e740602dbb7960e11b0bbf9053e95e8a1cb1e5.tar.gz
systemtap-steved-42e740602dbb7960e11b0bbf9053e95e8a1cb1e5.tar.xz
systemtap-steved-42e740602dbb7960e11b0bbf9053e95e8a1cb1e5.zip
Merge commit 'origin/master' into pr4225
* commit 'origin/master': (34 commits) PR5049: fix overbroad effects of naive "*" prefixing; instead use optional "*/" only. stap-serverd was incorectly determining that the server could stapprobes man page: clarify statement(NUM).absolute and process("path") searching PR5049: prefix with "*" any filenames given in "fn@filename:line" probes Indentation fix. Redirect stderr gets redircted so warnings don't let example script run fail. PR6835. io/io_submit.stp: Fix #! start. Convert to normal line-ending. PR2895. Add proper #! /usr/bin/env stap line. Make example scripts executable. Use INSTALL_PROGRAM, not INSTALL_DATA for executable .stp scripts. example index: only warn if old, do not regenerate Start/stop the systemtap server from systemtap.exp and not in the top level Makefile. Lower statement wildcard test matching threshold. Moved details of utrace detach to stap_utrace_detach(). Saves thread vma information. Always generate examples indexes and install examples from srcdir. Refer to srcdir spec file Makefile so make rpm works when builddir != srcdir. Add index of subsystem and keywords at top of HTML indexes. Don't output output, exits, status line in indexes (mentioned in descriptions). Disable chmodding of samples/kmalloc-top in spec file since it isn't installed. Make sure examples indexes are always generated in builddir. ...
Diffstat (limited to 'stap-server')
-rwxr-xr-xstap-server63
1 files changed, 48 insertions, 15 deletions
diff --git a/stap-server b/stap-server
index e825c49a..15a2fb48 100755
--- a/stap-server
+++ b/stap-server
@@ -31,6 +31,7 @@ function configuration {
# function: initialization
function initialization {
# Initialization
+ stap_rc=0
wd=`pwd`
# Default options settings
@@ -58,11 +59,14 @@ function receive_request {
tar_client=`mktemp -t $tmpdir_prefix_server.client.tgz.XXXXXX` || \
fatal "ERROR: cannot create temporary tar file " $tar_client
+ # Receive the file. We need to redirect stdin from /dev/zero to work
+ # around a bug in nc. It closes the connection early is stdin is not
+ # provided.
+ nc -l $port < /dev/zero > $tar_client &
+
# Request that the file be sent.
echo "ready:"
-
- # Receive the file.
- nc -l $port < /dev/null > $tar_client
+ wait %nc
}
# function: unpack_request
@@ -125,7 +129,7 @@ function server_sysinfo {
# Add some info from uname
sysinfo_server="`uname -rvm`"
fi
- echo $sysinfo_server
+ echo "$sysinfo_server"
}
# function check_compaibility SYSINFO1 SYSINFO2
@@ -152,14 +156,30 @@ function read_data_file {
test -f $1 || \
fatal "ERROR: Data file $1 not found"
- read < $1
+ # Open the file
+ exec 3< $1
+
+ # Verify the first line of the file.
+ read <&3
line=$REPLY
data=`expr "$line" : "$1: \\\(.*\\\)"`
- if test "X$data" != "X"; then
- echo $data
+ if test "X$data" = "X"; then
+ fatal "ERROR: Data in file $1 is incorrect"
return
fi
- fatal "ERROR: Data in file $1 is incorrect"
+
+ # Add any additional lines of data
+ while read <&3
+ do
+ data="$data
+$REPLY"
+ done
+
+ # Close the file
+ exec 3<&-
+
+ # Echo the result
+ echo "$data"
}
# function: parse_options [ STAP-OPTIONS ]
@@ -316,9 +336,11 @@ function call_stap {
server_p_phase=$p_phase
fi
- eval stap $cmdline -k -p $server_p_phase \
+ eval stap "$cmdline" -k -p $server_p_phase \
>> $tmpdir_server/stdout \
2>> $tmpdir_server/stderr
+
+ stap_rc=$?
}
# function: create_response
@@ -371,12 +393,20 @@ function package_response {
# Notify the client that $tar_server is ready and wait for the client to take
# it.
# The protocol is:
-# server -> "done:"
+# server -> "{done,failed}:"
# server -> $tar_server
function send_response {
- echo "done:"
- # Now send it
- nc -l $port < $tar_server > /dev/null
+ # Now send it. We need to redirect to /dev/null
+ # in order to workaround a nc bug. It closes the connection
+ # early if stdin from the other side is not provided.
+ nc -l $port < $tar_server > /dev/null &
+
+ if test $stap_rc = 0; then
+ echo "done:"
+ else
+ echo "failed:"
+ fi
+ wait %nc
}
# function: fatal [ MESSAGE ]
@@ -408,6 +438,9 @@ function cleanup {
rm -fr $tmpdir_server
rm -fr $tmpdir_stap
fi
+
+ # Kill any nc job that may be running
+ kill -s SIGTERM %nc 2> /dev/null
}
# function: terminate
@@ -416,7 +449,7 @@ function cleanup {
function terminate {
# Clean up
cleanup
- exit
+ exit 1
}
#-----------------------------------------------------------------------------
@@ -427,7 +460,7 @@ initialization
receive_request
unpack_request
check_request
-eval parse_options $cmdline
+eval parse_options "$cmdline"
call_stap
create_response
package_response