From: Viktor Szakats Date: Thu, 14 Aug 2025 11:36:04 +0000 (+0200) Subject: runtests: assume `Time::HiRes`, drop Perl Win32 dependency X-Git-Tag: curl-8_16_0~178 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=be01b60ce532af6eb18c11fbd565355dbb570a2e;p=thirdparty%2Fcurl.git runtests: assume `Time::HiRes`, drop Perl Win32 dependency `Time::HiRes` was already used unconditionally before this patch in `servers.pm`. This package, and functions used by runtests (`sleep` and `gettimeofday`) are supported by the minimum Perl version required for curl: https://perldoc.perl.org/5.8.0/Time::HiRes - Drop the `portable_sleep()` wrapper in favor of `Time::HiRes::sleep()`. - Use `Time::HiRes` unconditionally in `serverhelp.pm`. - Stop using the `Win32` package where available. It was included to provide a Windows fallback for `Time::HiRes::sleep()`. It was never actually called, but the dependency may have loaded `Win32.dll`, which often appears in failed fork operations in GHA logs. Ref: a6fed41f6f12f3b71cfe85609f02a294b972d3d3 #5054 #5034 Ref: https://github.com/curl/curl/discussions/14854 Closes #18287 --- diff --git a/tests/ftpserver.pl b/tests/ftpserver.pl index 927d4c66a3..71d6774fd1 100755 --- a/tests/ftpserver.pl +++ b/tests/ftpserver.pl @@ -51,6 +51,7 @@ BEGIN { use IPC::Open2; use Digest::MD5; use File::Basename; +use Time::HiRes; use directories; @@ -484,7 +485,7 @@ sub sendcontrol { for(@a) { sockfilt $_; - portable_sleep($ctrldelay); + Time::HiRes::sleep($ctrldelay); } } my $log; @@ -521,7 +522,7 @@ sub senddata { # pause between each byte for (split(//,$l)) { sockfiltsecondary $_; - portable_sleep($datadelay); + Time::HiRes::sleep($datadelay); } } } @@ -3292,7 +3293,7 @@ while(1) { logmsg("Sleep for $delay seconds\n"); my $twentieths = $delay * 20; while($twentieths--) { - portable_sleep(0.05) unless($got_exit_signal); + Time::HiRes::sleep(0.05) unless($got_exit_signal); } } diff --git a/tests/processhelp.pm b/tests/processhelp.pm index deec6de797..43513aae07 100644 --- a/tests/processhelp.pm +++ b/tests/processhelp.pm @@ -27,11 +27,12 @@ package processhelp; use strict; use warnings; +use Time::HiRes; + BEGIN { use base qw(Exporter); our @EXPORT = qw( - portable_sleep pidfromfile pidexists pidwait @@ -42,17 +43,6 @@ BEGIN { set_advisor_read_lock clear_advisor_read_lock ); - - # portable sleeping needs Time::HiRes - eval { - no warnings "all"; - require Time::HiRes; - }; - # portable sleeping falls back to native Sleep on Windows - eval { - no warnings "all"; - require Win32; - } } use serverhelp qw( @@ -69,27 +59,6 @@ use globalconfig qw( $dev_null ); -####################################################################### -# portable_sleep uses Time::HiRes::sleep if available and falls back -# to the classic approach of using select(undef, undef, undef, ...). -# even though that one is not portable due to being implemented using -# select on Windows: https://perldoc.perl.org/perlport.html#select -# Therefore it uses Win32::Sleep on Windows systems instead. -# -sub portable_sleep { - my ($seconds) = @_; - - if($Time::HiRes::VERSION) { - Time::HiRes::sleep($seconds); - } - elsif(os_is_win()) { - Win32::Sleep($seconds*1000); - } - else { - select(undef, undef, undef, $seconds); - } -} - ####################################################################### # pidfromfile returns the pid stored in the given pidfile. The value # of the returned pid will never be a negative value. It will be zero @@ -238,7 +207,7 @@ sub pidwait { last; } } - portable_sleep(0.2); + Time::HiRes::sleep(0.2); } return $pid; } @@ -346,7 +315,7 @@ sub killpid { last if(not scalar(@signalled)); # give any zombies of us a chance to move on to the afterlife pidwait(0, &WNOHANG); - portable_sleep(0.05); + Time::HiRes::sleep(0.05); } } diff --git a/tests/runner.pm b/tests/runner.pm index a208eba3a2..18f3c5098b 100644 --- a/tests/runner.pm +++ b/tests/runner.pm @@ -39,6 +39,7 @@ use warnings; use 5.006; use File::Basename; +use Time::HiRes; BEGIN { use base qw(Exporter); @@ -84,9 +85,6 @@ use Storable qw( use pathhelp qw( exe_ext ); -use processhelp qw( - portable_sleep - ); use servers qw( checkcmd initserverconfig @@ -419,7 +417,7 @@ sub waitlockunlock { my $lockretry = $serverlogslocktimeout * 20; my @locks; while((@locks = logslocked()) && $lockretry--) { - portable_sleep(0.05); + Time::HiRes::sleep(0.05); } if(($lockretry < 0) && ($serverlogslocktimeout >= $defserverlogslocktimeout)) { @@ -1092,7 +1090,7 @@ sub singletest_clean { } } - portable_sleep($postcommanddelay) if($postcommanddelay); + Time::HiRes::sleep($postcommanddelay) if($postcommanddelay); my @killtestservers = getpart("client", "killserver"); if(@killtestservers) { diff --git a/tests/runtests.pl b/tests/runtests.pl index 407a379468..a470597bf6 100755 --- a/tests/runtests.pl +++ b/tests/runtests.pl @@ -92,9 +92,6 @@ use pathhelp qw( exe_ext sys_native_current_path ); -use processhelp qw( - portable_sleep - ); use appveyor; use azure; diff --git a/tests/serverhelp.pm b/tests/serverhelp.pm index fd762935a2..1a3c997755 100644 --- a/tests/serverhelp.pm +++ b/tests/serverhelp.pm @@ -29,6 +29,8 @@ package serverhelp; use strict; use warnings; +use Time::HiRes; + BEGIN { use base qw(Exporter); @@ -52,13 +54,6 @@ BEGIN { datasockf_pidfilename datasockf_logfilename ); - - # sub second timestamping needs Time::HiRes - eval { - no warnings "all"; - require Time::HiRes; - import Time::HiRes qw( gettimeofday ); - } } use globalconfig; @@ -81,20 +76,10 @@ our $logfile; # server log file name, for logmsg # logmsg is general message logging subroutine for our test servers. # sub logmsg { - my $now; - # sub second timestamping needs Time::HiRes - if($Time::HiRes::VERSION) { - my ($seconds, $usec) = gettimeofday(); - my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = - localtime($seconds); - $now = sprintf("%02d:%02d:%02d.%06d ", $hour, $min, $sec, $usec); - } - else { - my $seconds = time(); - my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = - localtime($seconds); - $now = sprintf("%02d:%02d:%02d ", $hour, $min, $sec); - } + my ($seconds, $usec) = Time::HiRes::gettimeofday(); + my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = + localtime($seconds); + my $now = sprintf("%02d:%02d:%02d.%06d ", $hour, $min, $sec, $usec); # we see warnings on Windows run that $logfile is used uninitialized # TODO: not found yet where this comes from $logfile = "serverhelp_uninitialized.log" if(!$logfile); diff --git a/tests/servers.pm b/tests/servers.pm index 02415c6ff5..94809d3e7d 100644 --- a/tests/servers.pm +++ b/tests/servers.pm @@ -380,7 +380,7 @@ sub startnew { logmsg "startnew: failed to write fake $pidfile with pid=$child\n"; } # could/should do a while connect fails sleep a bit and loop - portable_sleep($timeout); + Time::HiRes::sleep($timeout); if(checkdied($child)) { logmsg "startnew: child process has failed to start\n" if($verbose); return (-1,-1);