6903102: 3/3 fixes in nightly testing version of ShellScaffold.sh need to be committed
Merge Jim's ShellScaffold.sh fixes with Tim's ShellScaffold.sh fixes. Reviewed-by: tbell
This commit is contained in:
parent
4da1e67db3
commit
3552fe5b4a
@ -1,7 +1,7 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright 2002-2005 Sun Microsystems, Inc. All Rights Reserved.
|
# Copyright 2002-2009 Sun Microsystems, Inc. All Rights Reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
@ -194,7 +194,7 @@ findPid()
|
|||||||
# Return 0 if $1 is the pid of a running process.
|
# Return 0 if $1 is the pid of a running process.
|
||||||
if [ -z "$isWin98" ] ; then
|
if [ -z "$isWin98" ] ; then
|
||||||
if [ "$osname" = SunOS ] ; then
|
if [ "$osname" = SunOS ] ; then
|
||||||
#Solaris and OpenSolaris use pgrep and not ps in psCmd
|
# Solaris and OpenSolaris use pgrep and not ps in psCmd
|
||||||
findPidCmd="$psCmd"
|
findPidCmd="$psCmd"
|
||||||
else
|
else
|
||||||
# Never use plain 'ps', which requires a "controlling terminal"
|
# Never use plain 'ps', which requires a "controlling terminal"
|
||||||
@ -298,15 +298,15 @@ EOF
|
|||||||
# On linux, core files take a long time, and can leave
|
# On linux, core files take a long time, and can leave
|
||||||
# zombie processes
|
# zombie processes
|
||||||
if [ "$osname" = SunOS ] ; then
|
if [ "$osname" = SunOS ] ; then
|
||||||
#Experiments show Solaris '/usr/ucb/ps -axwww' and
|
# Experiments show Solaris '/usr/ucb/ps -axwww' and
|
||||||
#'/usr/bin/pgrep -f -l' provide the same small amount of the
|
# '/usr/bin/pgrep -f -l' provide the same small amount of the
|
||||||
#argv string (PRARGSZ=80 in /usr/include/sys/procfs.h)
|
# argv string (PRARGSZ=80 in /usr/include/sys/procfs.h)
|
||||||
# 1) This seems to have been working OK in ShellScaffold.
|
# 1) This seems to have been working OK in ShellScaffold.
|
||||||
# 2) OpenSolaris does not provide /usr/ucb/ps, so use pgrep
|
# 2) OpenSolaris does not provide /usr/ucb/ps, so use pgrep
|
||||||
# instead
|
# instead
|
||||||
#The alternative would be to use /usr/bin/pargs [pid] to get
|
# The alternative would be to use /usr/bin/pargs [pid] to get
|
||||||
#all the args for a process, splice them back into one
|
# all the args for a process, splice them back into one
|
||||||
#long string, then grep.
|
# long string, then grep.
|
||||||
UU=`/usr/xpg4/bin/id -u -n`
|
UU=`/usr/xpg4/bin/id -u -n`
|
||||||
psCmd="pgrep -f -l -U $UU"
|
psCmd="pgrep -f -l -U $UU"
|
||||||
else
|
else
|
||||||
@ -519,7 +519,7 @@ cmd()
|
|||||||
# if jdb got a cont cmd that caused the debuggee
|
# if jdb got a cont cmd that caused the debuggee
|
||||||
# to run to completion, jdb can be gone before
|
# to run to completion, jdb can be gone before
|
||||||
# we get here.
|
# we get here.
|
||||||
echo quit >& 2
|
echo "--Sending cmd: quit" >& 2
|
||||||
echo quit
|
echo quit
|
||||||
# See 6562090. Maybe there is a way that the exit
|
# See 6562090. Maybe there is a way that the exit
|
||||||
# can cause jdb to not get the quit.
|
# can cause jdb to not get the quit.
|
||||||
@ -531,7 +531,7 @@ cmd()
|
|||||||
# because after starting jdb, we waited
|
# because after starting jdb, we waited
|
||||||
# for the prompt.
|
# for the prompt.
|
||||||
fileSize=`wc -c $jdbOutFile | awk '{ print $1 }'`
|
fileSize=`wc -c $jdbOutFile | awk '{ print $1 }'`
|
||||||
echo $* >&2
|
echo "--Sending cmd: " $* >&2
|
||||||
|
|
||||||
# jjh: We have a few intermittent failures here.
|
# jjh: We have a few intermittent failures here.
|
||||||
# It is as if every so often, jdb doesn't
|
# It is as if every so often, jdb doesn't
|
||||||
@ -558,12 +558,85 @@ cmd()
|
|||||||
# seen the ].
|
# seen the ].
|
||||||
echo $*
|
echo $*
|
||||||
|
|
||||||
# wait for jdb output to appear
|
# Now we have to wait for the next jdb prompt. We wait for a pattern
|
||||||
|
# to appear in the last line of jdb output. Normally, the prompt is
|
||||||
|
#
|
||||||
|
# 1) ^main[89] @
|
||||||
|
#
|
||||||
|
# where ^ means start of line, and @ means end of file with no end of line
|
||||||
|
# and 89 is the current command counter. But we have complications e.g.,
|
||||||
|
# the following jdb output can appear:
|
||||||
|
#
|
||||||
|
# 2) a[89] = 10
|
||||||
|
#
|
||||||
|
# The above form is an array assignment and not a prompt.
|
||||||
|
#
|
||||||
|
# 3) ^main[89] main[89] ...
|
||||||
|
#
|
||||||
|
# This occurs if the next cmd is one that causes no jdb output, e.g.,
|
||||||
|
# 'trace methods'.
|
||||||
|
#
|
||||||
|
# 4) ^main[89] [main[89]] .... > @
|
||||||
|
#
|
||||||
|
# jdb prints a > as a prompt after something like a cont.
|
||||||
|
# Thus, even though the above is the last 'line' in the file, it
|
||||||
|
# isn't the next prompt we are waiting for after the cont completes.
|
||||||
|
# HOWEVER, sometimes we see this for a cont command:
|
||||||
|
#
|
||||||
|
# ^main[89] $
|
||||||
|
# <lines output for hitting a bkpt>
|
||||||
|
#
|
||||||
|
# 5) ^main[89] > @
|
||||||
|
#
|
||||||
|
# i.e., the > prompt comes out AFTER the prompt we we need to wait for.
|
||||||
|
#
|
||||||
|
# So, how do we know when the next prompt has appeared??
|
||||||
|
# 1. Search for
|
||||||
|
# main[89] $
|
||||||
|
# This will handle cases 1, 2, 3
|
||||||
|
# 2. This leaves cases 4 and 5.
|
||||||
|
#
|
||||||
|
# What if we wait for 4 more chars to appear and then search for
|
||||||
|
#
|
||||||
|
# main[89] [>]$
|
||||||
|
#
|
||||||
|
# on the last line?
|
||||||
|
#
|
||||||
|
# a. if we are currently at
|
||||||
|
#
|
||||||
|
# ^main[89] main[89] @
|
||||||
|
#
|
||||||
|
# and a 'trace methods comes in, we will wait until at least
|
||||||
|
#
|
||||||
|
# ^main[89] main[89] main@
|
||||||
|
#
|
||||||
|
# and then the search will find the new prompt when it completes.
|
||||||
|
#
|
||||||
|
# b. if we are currently at
|
||||||
|
#
|
||||||
|
# ^main[89] main[89] @
|
||||||
|
#
|
||||||
|
# and the first form of cont comes in, then we will see
|
||||||
|
#
|
||||||
|
# ^main[89] main[89] > $
|
||||||
|
# ^x@
|
||||||
|
#
|
||||||
|
# where x is the first char of the msg output when the bkpt is hit
|
||||||
|
# and we will start our search, which will find the prompt
|
||||||
|
# when it comes out after the bkpt output, with or without the
|
||||||
|
# trailing >
|
||||||
|
#
|
||||||
|
|
||||||
|
# wait for 4 new chars to appear in the jdb output
|
||||||
count=0
|
count=0
|
||||||
|
desiredFileSize=`expr $fileSize + 4`
|
||||||
msg1=`echo At start: cmd/size/waiting : $* / $fileSize / \`date\``
|
msg1=`echo At start: cmd/size/waiting : $* / $fileSize / \`date\``
|
||||||
while [ 1 = 1 ] ; do
|
while [ 1 = 1 ] ; do
|
||||||
newFileSize=`wc -c $jdbOutFile | awk '{ print $1 } '`
|
newFileSize=`wc -c $jdbOutFile | awk '{ print $1 } '`
|
||||||
if [ "$fileSize" != "$newFileSize" ] ; then
|
#echo jj: desired = $desiredFileSize, new = $newFileSize >& 2
|
||||||
|
|
||||||
|
done=`expr $newFileSize \>= $desiredFileSize`
|
||||||
|
if [ $done = 1 ] ; then
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
sleep ${sleep_seconds}
|
sleep ${sleep_seconds}
|
||||||
@ -573,14 +646,19 @@ cmd()
|
|||||||
echo "--DEBUG: jdb $$ didn't responded to command in $count secs: $*" >& 2
|
echo "--DEBUG: jdb $$ didn't responded to command in $count secs: $*" >& 2
|
||||||
echo "--DEBUG:" $msg1 >& 2
|
echo "--DEBUG:" $msg1 >& 2
|
||||||
echo "--DEBUG: "done size/waiting : / $newFileSize / `date` >& 2
|
echo "--DEBUG: "done size/waiting : / $newFileSize / `date` >& 2
|
||||||
$psCmd | sed -e '/com.sun.javatest/d' -e '/nsk/d' >& 2
|
echo "-- $jdbOutFile follows-------------------------------" >& 2
|
||||||
|
cat $jdbOutFile >& 2
|
||||||
|
echo "------------------------------------------" >& 2
|
||||||
|
dojstack
|
||||||
|
#$psCmd | sed -e '/com.sun.javatest/d' -e '/nsk/d' >& 2
|
||||||
if [ $count = 60 ] ; then
|
if [ $count = 60 ] ; then
|
||||||
dofail "jdb never responded to command: $*"
|
dofail "jdb never responded to command: $*"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
# Note that this assumes just these chars in thread names.
|
||||||
waitForJdbMsg '^.*\[[0-9]*\] $' 1 allowExit
|
waitForJdbMsg '[a-zA-Z0-9_-][a-zA-Z0-9_-]*\[[1-9][0-9]*\] [ >]*$' \
|
||||||
|
1 allowExit
|
||||||
}
|
}
|
||||||
|
|
||||||
setBkpts()
|
setBkpts()
|
||||||
@ -596,15 +674,19 @@ setBkpts()
|
|||||||
runToBkpt()
|
runToBkpt()
|
||||||
{
|
{
|
||||||
cmd run
|
cmd run
|
||||||
|
# Don't need to do this - the above waits for the next prompt which comes out
|
||||||
|
# AFTER the Breakpoint hit message.
|
||||||
# Wait for jdb to hit the bkpt
|
# Wait for jdb to hit the bkpt
|
||||||
waitForJdbMsg "Breakpoint hit" 5
|
#waitForJdbMsg "Breakpoint hit" 5
|
||||||
}
|
}
|
||||||
|
|
||||||
contToBkpt()
|
contToBkpt()
|
||||||
{
|
{
|
||||||
cmd cont
|
cmd cont
|
||||||
|
# Don't need to do this - the above waits for the next prompt which comes out
|
||||||
|
# AFTER the Breakpoint hit message.
|
||||||
# Wait for jdb to hit the bkpt
|
# Wait for jdb to hit the bkpt
|
||||||
waitForJdbMsg "Breakpoint hit" 5
|
#waitForJdbMsg "Breakpoint hit" 5
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -618,7 +700,7 @@ waitForJdbMsg()
|
|||||||
nlines=$2
|
nlines=$2
|
||||||
allowExit="$3"
|
allowExit="$3"
|
||||||
myCount=0
|
myCount=0
|
||||||
timeLimit=40 # wait a max of 40 secs for a response from a jdb command
|
timeLimit=40 # wait a max of this many secs for a response from a jdb command
|
||||||
while [ 1 = 1 ] ; do
|
while [ 1 = 1 ] ; do
|
||||||
if [ -r $jdbOutFile ] ; then
|
if [ -r $jdbOutFile ] ; then
|
||||||
# Something here causes jdb to complain about Unrecognized cmd on x86.
|
# Something here causes jdb to complain about Unrecognized cmd on x86.
|
||||||
@ -654,8 +736,11 @@ waitForJdbMsg()
|
|||||||
|
|
||||||
myCount=`expr $myCount + ${sleep_seconds}`
|
myCount=`expr $myCount + ${sleep_seconds}`
|
||||||
if [ $myCount -gt $timeLimit ] ; then
|
if [ $myCount -gt $timeLimit ] ; then
|
||||||
|
echo "--Fail: waitForJdbMsg timed out after $timeLimit seconds, looking for /$1/, in $nlines lines; exitting" >> $failFile
|
||||||
|
echo "vv jdbOutFile vvvvvvvvvvvvvvvvvvvvvvvvvvvv" >& 2
|
||||||
|
cat $jdbOutFile >& 2
|
||||||
|
echo "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" >& 2
|
||||||
dojstack
|
dojstack
|
||||||
echo "--Fail: waitForJdbMsg timed out after $timeLimit seconds; exitting" >> $failFile
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
@ -865,35 +950,29 @@ grepForString()
|
|||||||
# get inserted into the string we are searching for
|
# get inserted into the string we are searching for
|
||||||
# so ignore those chars.
|
# so ignore those chars.
|
||||||
if [ -z "$3" ] ; then
|
if [ -z "$3" ] ; then
|
||||||
case "$2" in
|
theCmd=cat
|
||||||
*\>*)
|
|
||||||
# Target string contains a > so we better
|
|
||||||
# not ignore it
|
|
||||||
$grep -s "$2" $1 > $devnull 2>&1
|
|
||||||
stat=$?
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
# Target string does not contain a >.
|
|
||||||
# Ignore > and '> ' in the file.
|
|
||||||
cat $1 | sed -e 's@> @@g' -e 's@>@@g' | $grep -s "$2" > $devnull 2>&1
|
|
||||||
stat=$?
|
|
||||||
esac
|
|
||||||
else
|
else
|
||||||
case "$2" in
|
theCmd="tail -$3"
|
||||||
*\>*)
|
|
||||||
# Target string contains a > so we better
|
|
||||||
# not ignore it
|
|
||||||
tail -$3 $1 | $grep -s "$2" > $devnull 2>&1
|
|
||||||
stat=$?
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
# Target string does not contain a >.
|
|
||||||
# Ignore > and '> ' in the file.
|
|
||||||
tail -$3 $1 | sed -e 's@> @@g' -e 's@>@@g' | $grep -s "$2" > $devnull 2>&1
|
|
||||||
stat=$?
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
fi
|
||||||
|
case "$2" in
|
||||||
|
*\>*)
|
||||||
|
# Target string contains a > so we better
|
||||||
|
# not ignore it
|
||||||
|
$theCmd $1 | $grep -s "$2" > $devnull 2>&1
|
||||||
|
return $?
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
# Target string does not contain a >.
|
||||||
|
# Ignore > and '> ' in the file.
|
||||||
|
# NOTE: if $1 does not end with a new line, piping it to sed doesn't include the
|
||||||
|
# chars on the last line. Detect this case, and add a new line.
|
||||||
|
cp $1 $1.tmp
|
||||||
|
if [ `tail -1 $1.tmp | wc -l | sed -e 's@ @@g'` = 0 ] ; then
|
||||||
|
echo >> $1.tmp
|
||||||
|
fi
|
||||||
|
$theCmd $1.tmp | sed -e 's@> @@g' -e 's@>@@g' | $grep -s "$2" > $devnull 2>&1
|
||||||
|
stat=$?
|
||||||
|
rm -f $1.tmp
|
||||||
return $stat
|
return $stat
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user