>
> Looks like when script doing heavy I/O use all 1024 file descriptors,
> fail on opening next one and try to report this error using croak(),
> the Carp try to load (require) Carp::Heavy, and fail too (because
> there no
> available file descriptors). This result in die() with message:
> Can't locate Carp/Heavy.pm in @INC (@INC contains: ...) at
> /usr/lib/perl5/5.8.8/Carp.pm line 255.
> instead of original user's message.
>
> I think Carp should avoid requesting more resources (memory, file
> descriptors, etc.) when user call carp/croak/etc. Either Carp::Heavy
> should be loaded together with Carp when script start or in case
> Carp::Heavy can't be loaded Carp should contain some failback code,
> which at least output user's message using usual warn/die.
>
> -----------------------------------------------------------------
Patch attached that:
a) shows the error from Carp::Heavy,
b) the supplied string,
c) a solution/work-around
#!/usr/bin/perl -l
use Carp;
my @t;
for (1 .. 1024) {
open my $fh, "<", $0;
push @t, $fh;
}
croak "abc";
__END__
Now shows:
Failed to load Carp::Heavy. Consider adding use Carp::Heavy in your
code.
Carp-Error: Can't locate Carp/Heavy.pm: Too many open files at lib/
Carp.pm line 44.
Args: abc
Kind regards,
Bram