From b167e53f05cbddfc22a0e6a362a0aa14a460b31d Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Sun, 20 Sep 2020 15:58:26 +0100 Subject: [PATCH] Fix mi_gdb_exit with secondary MI channels Tests that use a secondary MI channel (i.e., either tests that call mi_gdb_start with separate-mi-tty, or all tests when FORCE_SEPARATE_MI_TTY=1 is specified on the make check command line), don't close GDB correctly. E.g., if you run gdb.mi/mi-exec-run.exp in a loop: while true; do make check TESTS="gdb.mi/mi-exec-run.exp"; done you can see more than one gdb running at the same time: $ ps -ef | grep -v grep | grep "gdb/gdb" pedro 40507 1 7 15:47 ? 00:00:00 /home/pedro/gdb/build/gdb/testsuite/../../gdb/gdb -nw -nx -data-directory /home/pedro/gdb/build/gdb/testsuite/../data-directory pedro 40562 1 0 15:47 ? 00:00:00 /home/pedro/gdb/build/gdb/testsuite/../../gdb/gdb -nw -nx -data-directory /home/pedro/gdb/build/gdb/testsuite/../data-directory pedro 40727 1 0 15:47 ? 00:00:00 /home/pedro/gdb/build/gdb/testsuite/../../gdb/gdb -nw -nx -data-directory /home/pedro/gdb/build/gdb/testsuite/../data-directory pedro 40786 1 0 15:47 ? 00:00:00 /home/pedro/gdb/build/gdb/testsuite/../../gdb/gdb -nw -nx -data-directory /home/pedro/gdb/build/gdb/testsuite/../data-directory This commit fixes it. gdb/testsuite/ChangeLog: * lib/mi-support.exp (mi_uncatched_gdb_exit) Switch to the main spawn_id before calling remote_close. Close secondary MI channel. --- gdb/testsuite/ChangeLog | 5 +++++ gdb/testsuite/lib/mi-support.exp | 12 ++++++++++++ 2 files changed, 17 insertions(+) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 71ec4951f16..85bafbada4a 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2020-09-20 Pedro Alves + + * lib/mi-support.exp (mi_uncatched_gdb_exit) Switch to the main + spawn_id before calling remote_close. Close secondary MI channel. + 2020-09-20 Pedro Alves * gdb.base/testenv.exp (find_env): Bail out if printing 'envp[$i]' diff --git a/gdb/testsuite/lib/mi-support.exp b/gdb/testsuite/lib/mi-support.exp index 5c1fcca4d23..0e7524ed0f6 100644 --- a/gdb/testsuite/lib/mi-support.exp +++ b/gdb/testsuite/lib/mi-support.exp @@ -89,6 +89,18 @@ proc mi_uncatched_gdb_exit {} { } } + # Switch back to the main spawn id, so that remote_close below + # closes it, and not a secondary channel. Closing a secondary + # channel does not make GDB exit. + if {$gdb_spawn_id != $gdb_main_spawn_id} { + switch_gdb_spawn_id $gdb_main_spawn_id + } + + # Close secondary MI channel, if there's one. + if {$mi_spawn_id != $gdb_main_spawn_id} { + close -i $mi_spawn_id + } + if ![is_remote host] { remote_close host } -- 2.30.2