Improve coverage of the PR threads/13217 regression test
authorPedro Alves <palves@redhat.com>
Thu, 13 Apr 2017 15:15:34 +0000 (16:15 +0100)
committerPedro Alves <palves@redhat.com>
Thu, 13 Apr 2017 15:18:16 +0000 (16:18 +0100)
- Make sure we end up with no thread selected after the detach.

- Test both "thread apply all" and "thread apply $some_threads", for
  completeness.

gdb/ChangeLog:
2017-04-13  Pedro Alves  <palves@redhat.com>

PR threads/13217
* gdb.threads/threadapply.exp (thr_apply_detach): New procedure.
(top level): Call it twice, with different thread sets.

gdb/ChangeLog
gdb/testsuite/gdb.threads/threadapply.exp

index 7b28fa2b9347e2c2841d3abdbb8f056ccf840d8b..66a2a14185b6dc3822faf0578abf8f28212dedb1 100644 (file)
@@ -1,3 +1,9 @@
+2017-04-13  Pedro Alves  <palves@redhat.com>
+
+       PR threads/13217
+       * gdb.threads/threadapply.exp (thr_apply_detach): New procedure.
+       (top level): Call it twice, with different thread sets.
+
 2017-04-13  Pedro Alves  <palves@redhat.com>
 
        * thread.c: Include <algorithm>.
index 789b2830e532c7acab2df61025f168ee0292adeb..959e8b9a3baa5b7a9d7a6d0dfc8fba5dbc72b6ab 100644 (file)
@@ -63,4 +63,33 @@ gdb_test "step" "thread_function.*" "step to the thread_function"
 gdb_test "up" ".*in main.*" "go up in the stack frame" 
 gdb_test "thread apply all print 1"  "Thread ..*\\\$\[0-9]+ = 1.*Thread ..*\\\$\[0-9]+ = 1.*Thread ..*\\\$\[0-9]+ = 1.*Thread ..*\\\$\[0-9]+ = 1.*Thread ..*\\\$\[0-9]+ = 1.*Thread ..*\\\$\[0-9]+ = 1" "run a simple print command on all threads"
 gdb_test "down" "#0.*thread_function.*" "go down and check selected frame"
-gdb_test "thread apply all detach" "Thread .*"
+
+# Make sure that GDB doesn't crash when the previously selected thread
+# exits due to the command run via thread apply.  Regression test for
+# PR threads/13217.
+
+proc thr_apply_detach {thread_set} {
+    with_test_prefix "thread apply $thread_set" {
+       global binfile
+       global break_line
+
+       clean_restart ${binfile}
+
+       if ![runto_main] {
+           fail "can't run to main"
+           return -1
+       }
+
+       gdb_breakpoint "$break_line"
+       gdb_continue_to_breakpoint "all threads started"
+
+       gdb_test "thread apply $thread_set detach" "Thread .*"
+       gdb_test "thread" "No thread selected" "switched to no thread selected"
+    }
+}
+
+# Test both "all" and a thread list, because those are implemented as
+# different commands in GDB.
+foreach thread_set {"all" "1.1 1.2 1.3"} {
+    thr_apply_detach $thread_set
+}