]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
runtests: assume `Time::HiRes`, drop Perl Win32 dependency
authorViktor Szakats <commit@vsz.me>
Thu, 14 Aug 2025 11:36:04 +0000 (13:36 +0200)
committerViktor Szakats <commit@vsz.me>
Thu, 14 Aug 2025 14:34:06 +0000 (16:34 +0200)
`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

tests/ftpserver.pl
tests/processhelp.pm
tests/runner.pm
tests/runtests.pl
tests/serverhelp.pm
tests/servers.pm

index 927d4c66a38ba48b1bbf4f05ad67162e73469586..71d6774fd1ea29c438690c34cb3e113cceb4f954 100755 (executable)
@@ -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);
             }
         }
 
index deec6de7970bee61967c1364e4156ad44b1ace04..43513aae077015f2f142891c7de1004b48474272 100644 (file)
@@ -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);
         }
     }
 
index a208eba3a2cc782b6846c9e9438747a3d0dbb0f6..18f3c5098b4e64439dba15676a0b16d509d1f9ea 100644 (file)
@@ -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) {
index 407a379468118444982efe8dfbea7292796231b8..a470597bf6d6aa39565674331acfdeb6049e9c29 100755 (executable)
@@ -92,9 +92,6 @@ use pathhelp qw(
     exe_ext
     sys_native_current_path
     );
-use processhelp qw(
-    portable_sleep
-    );
 
 use appveyor;
 use azure;
index fd762935a2118a6c31cbd2dbac6fd3e879346c2a..1a3c997755e536f3f352735811f7c6a368a5ac33 100644 (file)
@@ -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);
index 02415c6ff5da5500d7cd821851a19f773413d2e5..94809d3e7d780da38df5d60323c4b34ebae19c08 100644 (file)
@@ -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);