diff options
author | Pedro Alves <palves@redhat.com> | 2017-10-24 10:43:35 +0100 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2017-10-24 10:54:56 +0100 |
commit | 1f75a6516a4b480b5521dfb4e1a0721887ab5cdc (patch) | |
tree | 6dd8a5f6ecf49ae947e52fd0c3cf5c327c11e234 /gdb/testsuite/gdb.threads | |
parent | 779990d9f0a169215b3619a8a1cd120550320793 (diff) | |
download | gdb-1f75a6516a4b480b5521dfb4e1a0721887ab5cdc.zip gdb-1f75a6516a4b480b5521dfb4e1a0721887ab5cdc.tar.gz gdb-1f75a6516a4b480b5521dfb4e1a0721887ab5cdc.tar.bz2 |
Drop /proc/PID/status polling from gdb.threads/attach-into-signal.exp
I noticed that the 'with_test_prefix "stoppedtry $stoppedtry"' prefix
in this testcase is unnecessary, because inside that block there are
no pass/fail calls. In fact the block includes a comment saying:
# No PASS message as we may be looping in multiple
# attempts.
but looking deeper at this I noticed a few odd things with this code
block:
1. This code is assuming that the second line in the /proc/PID/status
files is the "State:" line, which may have been true when this was
originally written, but is not true on my machine at least (Linux
4.8.13).
$ cat /proc/self/status
Name: cat
Umask: 0002
State: R (running)
So nowadays, that 'string match "*(stopped)*"' is running against
the "Umask:" line and thus always returns false, meaning the loop
always breaks on $stoppedtry == 0.
2. The loop seems to be waiting for the process to become "(stopped)",
but if so then that 'if {![string match]}' check is reversed, it
should be checking 'if {[string match]}' instead, because "string
match" returns true if the string matches, not 0.
3. But if we fixed all that, we'd still run into the simple fact that
nothing is actually stopping the test's inferior process before GDB
attaches... The top of the testcase says:
# This test was created by modifying attach-stopped.exp.
... and attach-stopped.exp does have:
# Stop the program
remote_exec build "kill -s STOP ${testpid}"
but then attach-stopped.exp doesn't have an equivalent
/proc/PID/status poll loop... (Maybe it could.)
So remove this whole loop as useless.
gdb/testsuite/ChangeLog:
2017-10-24 Pedro Alves <palves@redhat.com>
* gdb.threads/attach-into-signal.exp: Remove whole "stoppedtry"
loop.
Diffstat (limited to 'gdb/testsuite/gdb.threads')
-rw-r--r-- | gdb/testsuite/gdb.threads/attach-into-signal.exp | 27 |
1 files changed, 0 insertions, 27 deletions
diff --git a/gdb/testsuite/gdb.threads/attach-into-signal.exp b/gdb/testsuite/gdb.threads/attach-into-signal.exp index 7502479..ab80e82 100644 --- a/gdb/testsuite/gdb.threads/attach-into-signal.exp +++ b/gdb/testsuite/gdb.threads/attach-into-signal.exp @@ -56,33 +56,6 @@ proc corefunc { threadtype executable } { set attempt 1 set passes 1 while { $passes < 3 && $attempt <= $attempts } { - set stoppedtry 0 - while { $stoppedtry < 10 } { - with_test_prefix "stoppedtry $stoppedtry" { - if [catch {open /proc/${testpid}/status r} fileid] { - set stoppedtry 10 - break - } - gets $fileid line1 - gets $fileid line2 - close $fileid - - if {![string match "*(stopped)*" $line2]} { - # No PASS message as we may be looping in multiple - # attempts. - break - } - sleep 1 - set stoppedtry [expr $stoppedtry + 1] - } - } - if { $stoppedtry >= 10 } { - verbose -log $line2 - set test "process is still running on the attempt # $attempt of $attempts" - break - } - - # Main test: set test "attach (pass $passes), pending signal catch" if {[gdb_test_multiple "attach $testpid" $test { -re "Attaching to program.*`?$escapedbinfile'?, process $testpid.* received signal SIGALRM.*$gdb_prompt $" { |