public inbox for gdb-cvs@sourceware.org
help / color / mirror / Atom feed
* [binutils-gdb] [gdb/testsuite] Use unique portnum in parallel testing
@ 2024-05-04  8:41 Tom de Vries
  0 siblings, 0 replies; only message in thread
From: Tom de Vries @ 2024-05-04  8:41 UTC (permalink / raw)
  To: gdb-cvs

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=e82dca2a57b05a95d45be74cb59046c79c9ed7d3

commit e82dca2a57b05a95d45be74cb59046c79c9ed7d3
Author: Tom de Vries <tdevries@suse.de>
Date:   Sat May 4 10:41:09 2024 +0200

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

Diff:
---
 gdb/testsuite/lib/gdbserver-support.exp | 47 ++++++++++++++++++++++++++-------
 1 file changed, 38 insertions(+), 9 deletions(-)

diff --git a/gdb/testsuite/lib/gdbserver-support.exp b/gdb/testsuite/lib/gdbserver-support.exp
index 0f97ce9c0fd..41ad5e6cbfb 100644
--- a/gdb/testsuite/lib/gdbserver-support.exp
+++ b/gdb/testsuite/lib/gdbserver-support.exp
@@ -141,18 +141,47 @@ proc get_portnum {} {
     # starting at $initial_portnum, to avoid conflicts with hung ports.
     set initial_portnum 2345
 
-    # Currently available port number.
-    gdb_persistent_global portnum
+    if { ![info exists ::GDB_PARALLEL] } {
+	# Sequential case.
 
-    # Initialize, if necessary.
-    if { ![info exists portnum] } {
-	set portnum $initial_portnum
+	# Currently available port number.
+	gdb_persistent_global portnum
+
+	# Initialize, if necessary.
+	if { ![info exists portnum] } {
+	    set portnum $initial_portnum
+	}
+
+	# Return currently available port number, and update it.
+	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 currently available port number, and update it.
-    set res $portnum
-    incr portnum
-    return $res
+    return $portnum
 }
 
 # Locate the gdbserver binary.  Returns "" if gdbserver could not be found.

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2024-05-04  8:41 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-05-04  8:41 [binutils-gdb] [gdb/testsuite] Use unique portnum in parallel testing Tom de Vries

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).