forked from Imagelibrary/binutils-gdb
[gdb/testsuite] Use unique portnum in parallel testing
When instrumenting get_portnum using: ... puts "PORTNUM: $res" ... and running: ... $ cd build/gdb $ make check-parallel -j2 TESTS=gdb.server/*.exp ... we run into: ... Running gdb.server/abspath.exp ... PORTNUM: 2345 ... and: ... Running gdb.server/bkpt-other-inferior.exp ... PORTNUM: 2345 ... This is because the test-cases are run in independent runtest invocations. Fix this by handling the parallel case in get_portnum using: - a file $objdir/cache/portnum to keep the portnum variable, and - a file $objdir/cache/portnum.lock to serialize access to it. Tested on aarch64-linux. Approved-By: Tom Tromey <tom@tromey.com>
This commit is contained in:
@@ -141,6 +141,9 @@ proc get_portnum {} {
|
||||
# starting at $initial_portnum, to avoid conflicts with hung ports.
|
||||
set initial_portnum 2345
|
||||
|
||||
if { ![info exists ::GDB_PARALLEL] } {
|
||||
# Sequential case.
|
||||
|
||||
# Currently available port number.
|
||||
gdb_persistent_global portnum
|
||||
|
||||
@@ -153,6 +156,32 @@ proc get_portnum {} {
|
||||
set res $portnum
|
||||
incr portnum
|
||||
return $res
|
||||
}
|
||||
|
||||
# Parallel case.
|
||||
with_lock portnum.lock {
|
||||
# Keep portnum file alongside the lock that guards it.
|
||||
set portnum_file [lock_dir]/portnum
|
||||
|
||||
if { [file exists $portnum_file] } {
|
||||
set fd [open $portnum_file r]
|
||||
set portnum [read $fd]
|
||||
close $fd
|
||||
|
||||
set portnum [string trim $portnum]
|
||||
} else {
|
||||
# Initialize.
|
||||
set portnum $initial_portnum
|
||||
}
|
||||
|
||||
set next_portnum [expr $portnum + 1]
|
||||
|
||||
set fd [open $portnum_file w]
|
||||
puts $fd $next_portnum
|
||||
close $fd
|
||||
}
|
||||
|
||||
return $portnum
|
||||
}
|
||||
|
||||
# Locate the gdbserver binary. Returns "" if gdbserver could not be found.
|
||||
|
||||
Reference in New Issue
Block a user