[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 {
