This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH] Increase timeout in gdb.mi/list-thread-groups-available.exp
On 01-08-19 21:16, Simon Marchi wrote:
> On 2019-08-01 2:18 p.m., Tom Tromey wrote:
>>>>>>> "Simon" == Simon Marchi <simon.marchi@efficios.com> writes:
>>
>> Simon> PR gdb/24863
>> Simon> * gdb.mi/list-thread-groups-available.exp: Increase timeout for
>> Simon> -list-thread-groups --available test.
>>
>> Simon> +save_vars { timeout } {
>> Simon> + # Increase the timeout: when running with `make check-read1`, this can take
>> Simon> + # a bit of time, as there is a lot of output generated, hence a lot of read
>> Simon> + # syscalls.
>> Simon> + set timeout [expr $timeout * 10]
>>
>> Maybe this should use with_timeout_factor.
>
> Ah, totally, I forgot about its existence. Here's a version using that.
>
> From d55b3eb5acd69b87495c9eeb57f96e4228911dbc Mon Sep 17 00:00:00 2001
> From: Simon Marchi <simon.marchi@efficios.com>
> Date: Thu, 1 Aug 2019 10:28:52 -0400
> Subject: [PATCH] Increase timeout in gdb.mi/list-thread-groups-available.exp
>
> Running
>
> make check-read1 TESTS="gdb.mi/list-thread-groups-available.exp"
>
> on my machine results in timeout failures. Running it while having
> `tail -F testsuite/gdb.log` on the side shows that the test is never
> really blocked, it is just slow at consuming the large output generated
> by `-list-thread-groups --available` (which lists all the processes on
> the system).
>
> If I increase the timeout to a large value, the test passes in ~30
> seconds (compared to under 1 second normally).
>
> Increase the timeout for the particular mi_gdb_test that is long to
> execute under read1. The new timeout value is a bit arbitrary. The
> default timeout is 10 seconds, so I set the new timeout to be
> "old-timeout * 10", so 100 seconds in the typical case.
>
> gdb/testsuite/ChangeLog:
>
> PR gdb/24863
> * gdb.mi/list-thread-groups-available.exp: Increase timeout for
> -list-thread-groups --available test.
> ---
Hi,
for me, both tests fail with a timeout. And if we're increasing the
timeout, how about we only do that if check-read1 is used?
Thanks,
- Tom
[gdb/testsuite] Increase timeout in gdb.mi/list-thread-groups-available.exp
Running
make check-read1 TESTS="gdb.mi/list-thread-groups-available.exp"
on my machine results in timeout failures. Running it while having
`tail -F testsuite/gdb.log` on the side shows that the test is never
really blocked, it is just slow at consuming the large output generated
by `-list-thread-groups --available` (which lists all the processes on
the system).
If I increase the timeout to a large value, the test passes in ~30
seconds (compared to under 1 second normally).
Increase the timeout for the particular mi_gdb_test that is long to
execute under read1. The new timeout value is a bit arbitrary. The
default timeout is 10 seconds, so I set the new timeout to be
"old-timeout * 10", so 100 seconds in the typical case.
gdb/testsuite/ChangeLog:
PR gdb/24863
* lib/gdb.exp (with_timeout_factor): Add and handle body_uplevel
parameter.
(with_read1_timeout_factor): New proc.
* gdb.mi/list-thread-groups-available.exp: Increase timeout for
-list-thread-groups --available tests.
---
.../gdb.mi/list-thread-groups-available.exp | 20 ++++++++++++--------
gdb/testsuite/lib/gdb.exp | 20 ++++++++++++++++----
2 files changed, 28 insertions(+), 12 deletions(-)
diff --git a/gdb/testsuite/gdb.mi/list-thread-groups-available.exp b/gdb/testsuite/gdb.mi/list-thread-groups-available.exp
index 792c3bac89..79b8d4d327 100644
--- a/gdb/testsuite/gdb.mi/list-thread-groups-available.exp
+++ b/gdb/testsuite/gdb.mi/list-thread-groups-available.exp
@@ -54,10 +54,12 @@ set cores_re "cores=\\\[(\"$decimal\"(,\"$decimal\")*)?\\\]"
# List all available processes.
set process_entry_re "{${id_re},${type_re}(,$description_re)?(,$user_re)?(,$cores_re)?}"
-mi_gdb_test \
- "-list-thread-groups --available" \
- "\\^done,groups=\\\[${process_entry_re}(,$process_entry_re)*\\\]" \
- "list available thread groups"
+with_read1_timeout_factor 10 {
+ mi_gdb_test \
+ "-list-thread-groups --available" \
+ "\\^done,groups=\\\[${process_entry_re}(,$process_entry_re)*\\\]" \
+ "list available thread groups"
+}
# List specific processes, make sure there are two entries.
set spawn_id_1 [remote_spawn target $binfile]
@@ -79,10 +81,12 @@ set process_entry_re_2 "{${id_re_2},${type_re}(,$description_re)?(,$user_re)?(,$
set process_list_re "(${process_entry_re_1},${process_entry_re_2}|${process_entry_re_2},${process_entry_re_1})"
-mi_gdb_test \
- "-list-thread-groups --available i${pid_1} i${pid_2}" \
- "\\^done,groups=\\\[${process_list_re}\\\]" \
- "list available thread groups with filter"
+with_read1_timeout_factor 10 {
+ mi_gdb_test \
+ "-list-thread-groups --available i${pid_1} i${pid_2}" \
+ "\\^done,groups=\\\[${process_list_re}\\\]" \
+ "list available thread groups with filter"
+}
kill_wait_spawned_process $spawn_id_1
kill_wait_spawned_process $spawn_id_2
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index 9ca34d8b15..b645100fc0 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -2338,16 +2338,16 @@ proc get_largest_timeout {} {
return $tmt
}
-# Run tests in BODY with timeout increased by factor of FACTOR. When
-# BODY is finished, restore timeout.
+# Run tests in BODY with BODY_UPLEVEL and with timeout increased by factor of
+# FACTOR. When BODY is finished, restore timeout.
-proc with_timeout_factor { factor body } {
+proc with_timeout_factor { factor body {body_uplevel 1}} {
global timeout
set savedtimeout $timeout
set timeout [expr [get_largest_timeout] * $factor]
- set code [catch {uplevel 1 $body} result]
+ set code [catch {uplevel $body_uplevel $body} result]
set timeout $savedtimeout
if {$code == 1} {
@@ -2358,6 +2358,18 @@ proc with_timeout_factor { factor body } {
}
}
+# Run BODY with timeout factor FACTOR if check-read1 is used.
+
+proc with_read1_timeout_factor { factor body } {
+ if { [info exists ::env(READ1)] == 1 && $::env(READ1) == 1 } {
+ # Use timeout factor
+ } else {
+ # Reset timeout factor
+ set factor 1
+ }
+ return [with_timeout_factor $factor $body 2]
+}
+
# Return 1 if _Complex types are supported, otherwise, return 0.
gdb_caching_proc support_complex_tests {