X-Git-Url: https://git.proxmox.com/?p=pve-common.git;a=blobdiff_plain;f=data%2FPVE%2FTools.pm;fp=data%2FPVE%2FTools.pm;h=f399d77dbb4541116bb4ea68adf112cc6e46c79d;hp=922c0e6685d6773ff9210428bde34b4931069b83;hb=eb7047f6744ae915ddbf2bffb2bd4011ae68d78c;hpb=19cec2309dad9487a2fc0a679c1a2b9d9995c4ba diff --git a/data/PVE/Tools.pm b/data/PVE/Tools.pm index 922c0e6..f399d77 100644 --- a/data/PVE/Tools.pm +++ b/data/PVE/Tools.pm @@ -17,6 +17,7 @@ use Encode; use Digest::SHA; use Text::ParseWords; use String::ShellQuote; +use Time::HiRes qw(usleep gettimeofday tv_interval); our @EXPORT_OK = qw( $IPV6RE @@ -627,13 +628,16 @@ sub extract_param { return $res; } -# Note: we use this to wait until vncterm is ready +# Note: we use this to wait until vncterm/spiceterm is ready sub wait_for_vnc_port { my ($port, $timeout) = @_; $timeout = 5 if !$timeout; + my $sleeptime = 0; + my $starttime = [gettimeofday]; + my $elapsed; - for (my $i = 0; $i < $timeout; $i++) { + while (($elapsed = tv_interval($starttime)) < $timeout) { if (my $fh = IO::File->new ("/proc/net/tcp", "r")) { while (defined (my $line = <$fh>)) { if ($line =~ m/^\s*\d+:\s+([0-9A-Fa-f]{8}):([0-9A-Fa-f]{4})\s/) { @@ -645,7 +649,8 @@ sub wait_for_vnc_port { } close($fh); } - sleep(1); + $sleeptime += 100000 if $sleeptime < 1000000; + usleep($sleeptime); } return undef;