You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
2.4 KiB
58 lines
2.4 KiB
From FEDORA_PATCHES Mon Sep 17 00:00:00 2001 |
|
From: Kevin Buettner <kevinb@redhat.com> |
|
Date: Fri, 19 Mar 2021 11:07:11 -0700 |
|
Subject: gdb-rhbz1941080-fix-gdbserver-hang.patch |
|
|
|
;; Backport change which fixes gdbserver testing hang on f34 and rawhide. |
|
|
|
Fix potential hang during gdbserver testing |
|
|
|
We're currently seeing testing of native-extended-gdbserver hang while |
|
testing the x86_64 architecture on both Fedora 34 and Fedora Rawhide. |
|
The test responsible for the hang is gdb.threads/fork-plus-threads.exp. |
|
|
|
While there is clearly a problem/bug with this test on F34 and |
|
Rawhide, it's also the case that testing should not hang. This commit |
|
prevents the hang by waiting with the "-nowait" flag in |
|
close_gdbserver. |
|
|
|
The -nowait flag is also used in the kill_wait_spawned_process proc in |
|
gdb/testsuite/lib/gdb.exp, so there is precedent for doing this. |
|
|
|
There are also 15 other uses of "wait -i" scattered throughout the |
|
test suite. While it's tempting to change these to also use the |
|
-nowait flag, I think it might be safer to defer doing so until we |
|
actually see a problem. |
|
|
|
I've tested this patch on Fedora 32, 33, 34, and Rawhide. Results are |
|
comparable on Fedora 32 and 33. On Fedora 34 and Rawhide, with this |
|
commit in place, testing completes when the target_board is |
|
native-extended-gdbserver. On those OSes, when not using this commit, |
|
testing usually hangs due to a problem with |
|
gdb.threads/fork-plus-threads.exp. I've also tested on all of the |
|
mentioned OSes with target_board=native-gdbserver; for that testing, |
|
I achieved comparable results over a number of runs. (Unfortunately |
|
results are rarely identical due to racy tests.) |
|
|
|
gdb/testsuite/ChangeLog: |
|
|
|
* lib/gdbserver-support.exp (gdbserver_exit): Use the |
|
"-nowait" flag when waiting for gdbserver to exit. |
|
|
|
diff --git a/gdb/testsuite/lib/gdbserver-support.exp b/gdb/testsuite/lib/gdbserver-support.exp |
|
--- a/gdb/testsuite/lib/gdbserver-support.exp |
|
+++ b/gdb/testsuite/lib/gdbserver-support.exp |
|
@@ -418,7 +418,12 @@ proc close_gdbserver {} { |
|
verbose "Quitting GDBserver" |
|
|
|
catch "close -i $server_spawn_id" |
|
- catch "wait -i $server_spawn_id" |
|
+ |
|
+ # If gdbserver misbehaves, and ignores the close, waiting for it |
|
+ # without the -nowait flag will cause testing to hang. Passing |
|
+ # -nowait makes expect tell Tcl to wait for the process in the |
|
+ # background. |
|
+ catch "wait -nowait -i $server_spawn_id" |
|
unset server_spawn_id |
|
} |
|
|
|
|