From: Andrew Dunstan Date: Wed, 21 Apr 2021 14:21:22 +0000 (-0400) Subject: Only ever test for non-127.0.0.1 addresses on Windows in PostgresNode X-Git-Tag: REL9_6_22~16 X-Git-Url: http://git.postgresql.org/gitweb/?a=commitdiff_plain;h=1d997cb3753253f2527aff398c2badbcda830588;p=postgresql.git Only ever test for non-127.0.0.1 addresses on Windows in PostgresNode This has been found to cause hangs where tcp usage is forced. Alexey Kodratov Discussion: https://postgr.es/m/82e271a9a11928337fcb5b5e57b423c0@postgrespro.ru Backpatch to all live branches --- diff --git a/src/test/perl/PostgresNode.pm b/src/test/perl/PostgresNode.pm index 0b07f3947cb..0ed0114a99b 100644 --- a/src/test/perl/PostgresNode.pm +++ b/src/test/perl/PostgresNode.pm @@ -977,28 +977,25 @@ sub get_new_node $found = 0 if ($node->port == $port); } - # Check to see if anything else is listening on this TCP port. This - # is *necessary* on $use_tcp (Windows) configurations. Seek a port - # available for all possible listen_addresses values, for own_host - # nodes and so the caller can harness this port for the widest range - # of purposes. The 0.0.0.0 test achieves that for post-2006 Cygwin, - # which automatically sets SO_EXCLUSIVEADDRUSE. The same holds for - # MSYS (a Cygwin fork). Testing 0.0.0.0 is insufficient for Windows - # native Perl (https://stackoverflow.com/a/14388707), so we also test - # individual addresses. + # Check to see if anything else is listening on this TCP port. + # Seek a port available for all possible listen_addresses values, + # so callers can harness this port for the widest range of purposes. + # The 0.0.0.0 test achieves that for MSYS, which automatically sets + # SO_EXCLUSIVEADDRUSE. Testing 0.0.0.0 is insufficient for Windows + # native Perl (https://stackoverflow.com/a/14388707), so we also + # have to test individual addresses. Doing that for 127.0.0/24 + # addresses other than 127.0.0.1 might fail with EADDRNOTAVAIL on + # non-Linux, non-Windows kernels. # - # This seems like a good idea on Unixen as well, even though we don't - # ask the postmaster to open a TCP port on Unix. On Non-Linux, - # non-Windows kernels, binding to 127.0.0.1/24 addresses other than - # 127.0.0.1 might fail with EADDRNOTAVAIL. Binding to 0.0.0.0 is - # unnecessary on non-Windows systems. - # - # XXX A port available now may become unavailable by the time we start - # the postmaster. + # Thus, 0.0.0.0 and individual 127.0.0/24 addresses are tested + # only on Windows and only when TCP usage is requested. if ($found == 1) { foreach my $addr (qw(127.0.0.1), - $use_tcp ? qw(127.0.0.2 127.0.0.3 0.0.0.0) : ()) + $use_tcp ? qw(127.0.0.2 127.0.0.3 0.0.0.0) : ()) + $use_tcp && $TestLib::windows_os + ? qw(127.0.0.2 127.0.0.3 0.0.0.0) + : ()) { can_bind($addr, $port) or $found = 0; }