This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[perl #75156] fix the return value and bits for removing a closed fh
[perl5.git] / dist / IO / lib / IO / Select.pm
index 756a299..994f896 100644 (file)
@@ -11,7 +11,7 @@ use warnings::register;
 use     vars qw($VERSION @ISA);
 require Exporter;
 
-$VERSION = "1.21";
+$VERSION = "1.22";
 
 @ISA = qw(Exporter); # This is only so we can do version checking
 
@@ -86,15 +86,24 @@ sub _update
      $vec->[$i] = $f;
    } else {      # remove
      if ( ! defined $fn ) { # remove if fileno undef'd
-         defined($_) && $_ == $f and do { $vec->[FD_COUNT]--; $_ = undef; }
-           for @{$vec}[FIRST_FD .. $#$vec];
-         next;
+       $fn = 0;
+       for my $fe (@{$vec}[FIRST_FD .. $#$vec]) {
+         if (defined($fe) && $fe == $f) {
+          $vec->[FD_COUNT]--;
+          $fe = undef;
+          vec($bits, $fn, 1) = 0;
+          last;
+        }
+        ++$fn;
+       }
+     }
+     else {
+       my $i = $fn + FIRST_FD;
+       next unless defined $vec->[$i];
+       $vec->[FD_COUNT]--;
+       vec($bits, $fn, 1) = 0;
+       $vec->[$i] = undef;
      }
-     my $i = $fn + FIRST_FD;
-     next unless defined $vec->[$i];
-     $vec->[FD_COUNT]--;
-     vec($bits, $fn, 1) = 0;
-     $vec->[$i] = undef;
    }
    $count++;
   }