This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Improve coverage of the PR threads/13217 regression test


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=5fd69d0ab2c42d2be0781bf3a5d60e1d5b8d05dc

commit 5fd69d0ab2c42d2be0781bf3a5d60e1d5b8d05dc
Author: Pedro Alves <palves@redhat.com>
Date:   Thu Apr 13 16:15:34 2017 +0100

    Improve coverage of the PR threads/13217 regression test
    
    - 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.

Diff:
---
 gdb/ChangeLog                             |  6 ++++++
 gdb/testsuite/gdb.threads/threadapply.exp | 31 ++++++++++++++++++++++++++++++-
 2 files changed, 36 insertions(+), 1 deletion(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 7b28fa2..66a2a14 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,11 @@
 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>.
 	(thread_array_cleanup): Delete.
 	(scoped_inc_dec_ref): New class.
diff --git a/gdb/testsuite/gdb.threads/threadapply.exp b/gdb/testsuite/gdb.threads/threadapply.exp
index 789b283..959e8b9 100644
--- a/gdb/testsuite/gdb.threads/threadapply.exp
+++ b/gdb/testsuite/gdb.threads/threadapply.exp
@@ -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
+}


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]