From 5b44631397787a65327fcab77f7df37862286ed9 Mon Sep 17 00:00:00 2001 From: Oran Agra Date: Sun, 22 Nov 2020 21:21:42 +0200 Subject: [PATCH] testsuite: fix fd leak, prevent port clashing when using --baseport when using --baseport to run two tests suite in parallel (different folders), we need to also make sure the port used by the testsuite to communicate with it's workers is unique. otherwise the attept to find a free port connects to the other test suite and messes it. maybe one day we need to attempt to bind, instead of connect when tring to find a free port. --- tests/support/redis.tcl | 2 ++ tests/test_helper.tcl | 6 +++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/tests/support/redis.tcl b/tests/support/redis.tcl index 847f68e63..26b4510ac 100644 --- a/tests/support/redis.tcl +++ b/tests/support/redis.tcl @@ -109,6 +109,7 @@ proc ::redis::__dispatch__raw__ {id method argv} { } ::redis::redis_write $fd $cmd if {[catch {flush $fd}]} { + catch {close $fd} set ::redis::fd($id) {} return -code error "I/O error reading reply" } @@ -251,6 +252,7 @@ proc ::redis::redis_read_reply {id fd} { % {redis_read_map $id $fd} default { if {$type eq {}} { + catch {close $fd} set ::redis::fd($id) {} return -code error "I/O error reading reply" } diff --git a/tests/test_helper.tcl b/tests/test_helper.tcl index a1fae8d75..29ebdd7bb 100644 --- a/tests/test_helper.tcl +++ b/tests/test_helper.tcl @@ -180,6 +180,10 @@ proc reconnect {args} { set port [dict get $srv "port"] set config [dict get $srv "config"] set client [redis $host $port 0 $::tls] + if {[dict exists $srv "client"]} { + set old [dict get $srv "client"] + $old close + } dict set srv "client" $client # select the right db when we don't have to authenticate @@ -257,7 +261,7 @@ proc test_server_main {} { set tclsh [info nameofexecutable] # Open a listening socket, trying different ports in order to find a # non busy one. - set clientport [find_available_port 11111 32] + set clientport [find_available_port [expr {$::baseport - 32}] 32] if {!$::quiet} { puts "Starting test server at port $clientport" }