`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
use IPC::Open2;
use Digest::MD5;
use File::Basename;
+use Time::HiRes;
use directories;
for(@a) {
sockfilt $_;
- portable_sleep($ctrldelay);
+ Time::HiRes::sleep($ctrldelay);
}
}
my $log;
# pause between each byte
for (split(//,$l)) {
sockfiltsecondary $_;
- portable_sleep($datadelay);
+ Time::HiRes::sleep($datadelay);
}
}
}
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);
}
}
use strict;
use warnings;
+use Time::HiRes;
+
BEGIN {
use base qw(Exporter);
our @EXPORT = qw(
- portable_sleep
pidfromfile
pidexists
pidwait
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(
$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
last;
}
}
- portable_sleep(0.2);
+ Time::HiRes::sleep(0.2);
}
return $pid;
}
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);
}
}
use 5.006;
use File::Basename;
+use Time::HiRes;
BEGIN {
use base qw(Exporter);
use pathhelp qw(
exe_ext
);
-use processhelp qw(
- portable_sleep
- );
use servers qw(
checkcmd
initserverconfig
my $lockretry = $serverlogslocktimeout * 20;
my @locks;
while((@locks = logslocked()) && $lockretry--) {
- portable_sleep(0.05);
+ Time::HiRes::sleep(0.05);
}
if(($lockretry < 0) &&
($serverlogslocktimeout >= $defserverlogslocktimeout)) {
}
}
- portable_sleep($postcommanddelay) if($postcommanddelay);
+ Time::HiRes::sleep($postcommanddelay) if($postcommanddelay);
my @killtestservers = getpart("client", "killserver");
if(@killtestservers) {
exe_ext
sys_native_current_path
);
-use processhelp qw(
- portable_sleep
- );
use appveyor;
use azure;
use strict;
use warnings;
+use Time::HiRes;
+
BEGIN {
use base qw(Exporter);
datasockf_pidfilename
datasockf_logfilename
);
-
- # sub second timestamping needs Time::HiRes
- eval {
- no warnings "all";
- require Time::HiRes;
- import Time::HiRes qw( gettimeofday );
- }
}
use globalconfig;
# 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);
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);