From 272c36b87f81fd64e5f4669730da72c39d0716b3 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Fri, 15 May 2020 11:09:51 +0100 Subject: [PATCH] Fix global variable collision in gdb.multi/multi-kill.exp The new gdb.multi/multi-kill.exp testcase added an 'testpid' array, which may conflict with other global 'testpid' variables used by other testcases, resulting in: ... ERROR: tcl error sourcing /data/gdb_versions/devel/src/gdb/testsuite/gdb.multi/multi-kill.exp. ERROR: can't set "testpid(1)": variable isn't array while executing "set testpid($num) [get_integer_valueof "pid" -1]" or $ runtest gdb.threads/check-libthread-db.exp gdb.multi/multi-kill.exp ... Running /home/pedro/gdb/binutils-gdb/src/gdb/testsuite/gdb.multi/multi-kill.exp ... Running /home/pedro/gdb/binutils-gdb/src/gdb/testsuite/gdb.threads/check-libthread-db.exp ... ERROR: tcl error sourcing /home/pedro/gdb/binutils-gdb/src/gdb/testsuite/gdb.threads/check-libthread-db.exp. ERROR: can't set "testpid": variable is array while executing "set testpid [spawn_id_get_pid $test_spawn_id]" ("uplevel" body line 8) Fix this with a namespace, like gdb.linespec/explicit.exp does. gdb/testsuite/ChangeLog: 2020-05-15 Pedro Alves * gdb.multi/multi-kill.exp: Wrap in namespace. (start_inferior): Add TESTPID parameter. Use it instead of the testpid global. (top level): Define empty TESTPID array, and pass it down to start_inferior. --- gdb/testsuite/ChangeLog | 8 ++++++++ gdb/testsuite/gdb.multi/multi-kill.exp | 19 ++++++++++++++----- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 6c025832e3..93ad65b32a 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2020-05-15 Pedro Alves + + * gdb.multi/multi-kill.exp: Wrap in namespace. + (start_inferior): Add TESTPID parameter. Use it instead of the + testpid global. + (top level): Define empty TESTPID array, and pass it down to + start_inferior. + 2020-05-14 Tom de Vries * gdb.fortran/nested-funcs-2.exp: Use gdb_test_stdio to test inferior diff --git a/gdb/testsuite/gdb.multi/multi-kill.exp b/gdb/testsuite/gdb.multi/multi-kill.exp index ce6075045f..03bf8449cf 100644 --- a/gdb/testsuite/gdb.multi/multi-kill.exp +++ b/gdb/testsuite/gdb.multi/multi-kill.exp @@ -39,11 +39,15 @@ save_vars { GDBFLAGS } { clean_restart ${binfile} } +# Wrap the entire test in a namespace to avoid contaminating other tests. +namespace eval $testfile { + # Start inferior NUM and record its PID in the TESTPID array. -proc start_inferior {num} { +proc start_inferior {num testpid} { with_test_prefix "start_inferior $num" { - global testpid binfile srcfile + upvar $testpid tpid + global binfile srcfile if {$num != 1} { gdb_test "add-inferior" "Added inferior .*" \ @@ -58,8 +62,8 @@ proc start_inferior {num} { gdb_run_cmd gdb_test "" ".*reakpoint .*, initialized .*${srcfile}.*" "run" - set testpid($num) [get_integer_valueof "pid" -1] - if {$testpid($num) == -1} { + set tpid($num) [get_integer_valueof "pid" -1] + if {$tpid($num) == -1} { return -1 } @@ -71,8 +75,11 @@ proc start_inferior {num} { # is killed while we're handling a killed event. set NUM_INFS 10 +# The array holding each inferior's PID, indexed by inferior number. +array set testpid {} + for {set i 1} {$i <= $NUM_INFS} {incr i} { - if {[start_inferior $i] < 0} { + if {[start_inferior $i testpid] < 0} { return -1 } } @@ -125,3 +132,5 @@ for {set i 2} {$i <= $NUM_INFS} {incr i} { "continue to SIGKILL" } } + +}