Code

handle errors properly ... in RRDp read call
authoroetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa>
Sun, 4 Nov 2007 21:56:19 +0000 (21:56 +0000)
committeroetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa>
Sun, 4 Nov 2007 21:56:19 +0000 (21:56 +0000)
git-svn-id: svn://svn.oetiker.ch/rrdtool/trunk@1209 a5681a0c-68f1-0310-ab6d-d61299d08faa

program/bindings/perl-piped/RRDp.pm

index 3601cdd4faeaca05e0e1fcb016388a29e63df18d..91facb3f6cdf6ba66b6dc7adc0e59a281c0faec6 100644 (file)
@@ -146,7 +146,6 @@ sub read () {
   my $buffer;
   my $nfound;
   my $timeleft;
-  my $ERR = 0;
   vec($inmask,fileno(RRDreadHand),1) = 1; # setup select mask for Reader
   while (1) {
     my $rout;    
@@ -163,11 +162,14 @@ sub read () {
       $RRDp::error = undef;
       if ($line =~  m|^ERROR|) {       
        $RRDp::error_mode eq 'catch' ? $RRDp::error = $line : croak $line;
-       $ERR = 1;
+        $RRDp::sys = undef;
+        $RRDp::user = undef;
+        $RRDp::real = undef;
+       return undef;
       } 
-      elsif ($line =~ m|^OK u:([\d\.]+) s:([\d\.]+) r:([\d\.]+)|){
+      elsif ($line =~ m|^OK(?: u:([\d\.]+) s:([\d\.]+) r:([\d\.]+))?|){
        ($RRDp::sys,$RRDp::user,$RRDp::real)=($1,$2,$3);
-       return $ERR == 1 ? undef : \$buffer;
+       return \$buffer;
       } else {
        $buffer .= $line. "\n";
       }