On Wed, Oct 02, 2019 at 06:07:39PM +0100, Steve Hay wrote: > > I'm not sure about this area, but if it works for with your patch then > it's probably an improvement :-) > > Just out of interest, does the following alternative patch work? > > Index: lib/Apache2/Resource.pm > =================================================================== > --- lib/Apache2/Resource.pm (revision 1866274) > +++ lib/Apache2/Resource.pm (working copy) > @@ -115,8 +115,7 @@ > "</tr>"); > > for my $res (keys %$lim) { > - my $val = eval "&BSD::Resource::${res}()"; > - my ($soft, $hard) = getrlimit $val; > + my ($soft, $hard) = getrlimit($lim->{$res}); > (my $limit = $res) =~ s/^RLIMIT_//; > ($soft, $hard) = ("$soft " . BM($soft), "$hard ". BM($hard)) > if $is_mb{$limit};
Yes, that works just as well for me. > This avoids making the &BSD::Resource::${res}() calls, which are what > is returning undef for you in some cases. Or does this fail just the > same because some of the values of %$lim are also undef anyway? The %$lim values are not undef. See the attached stand-alone test and output for the problematic values which I see and which also shows that the limits for those resources are still retrievable via getrlimit(). HTH, Pete -- Openstrike - improving business through open source https://www.openstrike.co.uk/ or call 01722 770036
use strict; use warnings; use Test::More; use BSD::Resource qw/getrlimit get_rlimits/; my $lim = get_rlimits (); ok defined $lim, "get_rlimits returns defined value"; ok ref $lim, "get_rlimits returns reference"; is ref $lim, 'HASH', "get_rlimits returns hash reference"; for my $res (keys %$lim) { my $subval = eval "&BSD::Resource::${res}()"; ok defined $subval, "BSD::Resource::${res}() gives defined result"; is $subval, $lim->{$res}, 'Sub from resource matches hash value'; my ($soft, $hard) = getrlimit $lim->{$res}; ok defined $soft, "$res has soft limit $soft"; ok defined $hard, "$res has hard limit $hard"; } done_testing (3 + 4 * keys %$lim);
ok 1 - get_rlimits returns defined value ok 2 - get_rlimits returns reference ok 3 - get_rlimits returns hash reference ok 4 - BSD::Resource::RLIMIT_STACK() gives defined result ok 5 - Sub from resource matches hash value ok 6 - RLIMIT_STACK has soft limit 8388608 ok 7 - RLIMIT_STACK has hard limit -1 ok 8 - BSD::Resource::RLIMIT_LOCKS() gives defined result ok 9 - Sub from resource matches hash value ok 10 - RLIMIT_LOCKS has soft limit -1 ok 11 - RLIMIT_LOCKS has hard limit -1 ok 12 - BSD::Resource::RLIMIT_CORE() gives defined result ok 13 - Sub from resource matches hash value ok 14 - RLIMIT_CORE has soft limit 0 ok 15 - RLIMIT_CORE has hard limit -1 ok 16 - BSD::Resource::RLIMIT_DATA() gives defined result ok 17 - Sub from resource matches hash value ok 18 - RLIMIT_DATA has soft limit -1 ok 19 - RLIMIT_DATA has hard limit -1 ok 20 - BSD::Resource::RLIMIT_AS() gives defined result ok 21 - Sub from resource matches hash value ok 22 - RLIMIT_AS has soft limit -1 ok 23 - RLIMIT_AS has hard limit -1 ok 24 - BSD::Resource::RLIMIT_CPU() gives defined result ok 25 - Sub from resource matches hash value ok 26 - RLIMIT_CPU has soft limit -1 ok 27 - RLIMIT_CPU has hard limit -1 ok 28 - BSD::Resource::RLIMIT_MEMLOCK() gives defined result ok 29 - Sub from resource matches hash value ok 30 - RLIMIT_MEMLOCK has soft limit 65536 ok 31 - RLIMIT_MEMLOCK has hard limit 65536 ok 32 - BSD::Resource::RLIMIT_OFILE() gives defined result ok 33 - Sub from resource matches hash value ok 34 - RLIMIT_OFILE has soft limit 1024 ok 35 - RLIMIT_OFILE has hard limit 4096 ok 36 - BSD::Resource::RLIMIT_FSIZE() gives defined result ok 37 - Sub from resource matches hash value ok 38 - RLIMIT_FSIZE has soft limit -1 ok 39 - RLIMIT_FSIZE has hard limit -1 ok 40 - BSD::Resource::RLIMIT_OPEN_MAX() gives defined result ok 41 - Sub from resource matches hash value ok 42 - RLIMIT_OPEN_MAX has soft limit 1024 ok 43 - RLIMIT_OPEN_MAX has hard limit 4096 ok 44 - BSD::Resource::RLIMIT_NPROC() gives defined result ok 45 - Sub from resource matches hash value ok 46 - RLIMIT_NPROC has soft limit 4096 ok 47 - RLIMIT_NPROC has hard limit 30837 not ok 48 - BSD::Resource::RLIMIT_MSGQUEUE() gives defined result # Failed test 'BSD::Resource::RLIMIT_MSGQUEUE() gives defined result' # at getrlimit.t line 14. not ok 49 - Sub from resource matches hash value # Failed test 'Sub from resource matches hash value' # at getrlimit.t line 15. # got: undef # expected: '12' ok 50 - RLIMIT_MSGQUEUE has soft limit 819200 ok 51 - RLIMIT_MSGQUEUE has hard limit 819200 ok 52 - BSD::Resource::RLIMIT_NOFILE() gives defined result ok 53 - Sub from resource matches hash value ok 54 - RLIMIT_NOFILE has soft limit 1024 ok 55 - RLIMIT_NOFILE has hard limit 4096 not ok 56 - BSD::Resource::RLIMIT_NICE() gives defined result # Failed test 'BSD::Resource::RLIMIT_NICE() gives defined result' # at getrlimit.t line 14. not ok 57 - Sub from resource matches hash value # Failed test 'Sub from resource matches hash value' # at getrlimit.t line 15. # got: undef # expected: '13' ok 58 - RLIMIT_NICE has soft limit 0 ok 59 - RLIMIT_NICE has hard limit 0 ok 60 - BSD::Resource::RLIMIT_VMEM() gives defined result ok 61 - Sub from resource matches hash value ok 62 - RLIMIT_VMEM has soft limit -1 ok 63 - RLIMIT_VMEM has hard limit -1 not ok 64 - BSD::Resource::RLIMIT_SIGPENDING() gives defined result # Failed test 'BSD::Resource::RLIMIT_SIGPENDING() gives defined result' # at getrlimit.t line 14. not ok 65 - Sub from resource matches hash value # Failed test 'Sub from resource matches hash value' # at getrlimit.t line 15. # got: undef # expected: '11' ok 66 - RLIMIT_SIGPENDING has soft limit 30837 ok 67 - RLIMIT_SIGPENDING has hard limit 30837 not ok 68 - BSD::Resource::RLIMIT_RTTIME() gives defined result # Failed test 'BSD::Resource::RLIMIT_RTTIME() gives defined result' # at getrlimit.t line 14. not ok 69 - Sub from resource matches hash value # Failed test 'Sub from resource matches hash value' # at getrlimit.t line 15. # got: undef # expected: '15' ok 70 - RLIMIT_RTTIME has soft limit -1 ok 71 - RLIMIT_RTTIME has hard limit -1 not ok 72 - BSD::Resource::RLIMIT_RTPRIO() gives defined result # Failed test 'BSD::Resource::RLIMIT_RTPRIO() gives defined result' # at getrlimit.t line 14. not ok 73 - Sub from resource matches hash value # Failed test 'Sub from resource matches hash value' # at getrlimit.t line 15. # got: undef # expected: '14' ok 74 - RLIMIT_RTPRIO has soft limit 0 ok 75 - RLIMIT_RTPRIO has hard limit 0 ok 76 - BSD::Resource::RLIMIT_RSS() gives defined result ok 77 - Sub from resource matches hash value ok 78 - RLIMIT_RSS has soft limit -1 ok 79 - RLIMIT_RSS has hard limit -1 1..79 # Looks like you failed 10 tests of 79.
pgpXlvLf7lbcW.pgp
Description: PGP signature