diff options
author | Frank Ch. Eigler <fche@elastic.org> | 2008-08-11 17:34:47 -0400 |
---|---|---|
committer | Frank Ch. Eigler <fche@elastic.org> | 2008-08-11 17:34:47 -0400 |
commit | 42e740602dbb7960e11b0bbf9053e95e8a1cb1e5 (patch) | |
tree | aa32f56c7c5b1838e9d80bec2c15325c71742660 /stap-server | |
parent | 3213d0891c826f16ba727a3e863075e2922666a0 (diff) | |
parent | 79640c29c5bcf8de20f013dcc80e1a9c7a93811f (diff) | |
download | systemtap-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-x | stap-server | 63 |
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 |