1. Problem Description: Apache2::SizeLimit aborts when smaps facility is unavailable. Here's the error from the error log:
Linux::Smaps: Cannot open /proc/9700/smaps: No such file or directory BEGIN failed--compilation aborted at /data/wre/prereqs/lib/perl5/site_perl/5.10.0/i686-linux/Apache2/SizeLimit.pm line 98 This installation is part of WebGUI CMS (hence the path, starting with /data/wre), but there's nothing specific to WebGUI here - it's just a plain mod_perl file tree. The error is not caused by insufficient read permissions - there are simply no smaps files in /proc/xxx. Apache2::SizeLimit documentation mentions two possible solutions: 1. Installing an OS patch with smaps support (which may or may not be an option) 2. Setting $Apache2::SizeLimit::USE_SMAPS to 0 before the first check. This doesn't help in this particular case, because the error is generated within the BEGIN block; besides, the chunk of code which produces this error, pays no attention to $USE_SMAPS I believe the error is caused simply by placing the wrong (or rather insufficient) statement inside eval() : if ( eval { require Linux::Smaps } and Linux::Smaps->new($$) ) { ... } Linux::Smaps module is present, and obviously returns 1, but Linux::Smaps->new throws an error which is not being caught by eval. I propose the following trivial patch: --------------------------8<-------------------- *** ./SizeLimit.pm 2009-11-30 09:13:16.000000000 -0600 --- /tmp/SizeLimit.pm.orig 2009-11-30 09:24:04.000000000 -0600 *************** *** 58,64 **** } elsif (LINUX) { ! if ( eval { require Linux::Smaps and Linux::Smaps->new($$) } ) { $HOW_BIG_IS_IT = \&linux_smaps_size_check_first_time; } else { --- 58,64 ---- } elsif (LINUX) { ! if ( eval { require Linux::Smaps } and Linux::Smaps->new($$) ) { $HOW_BIG_IS_IT = \&linux_smaps_size_check_first_time; } else { --------------------------8<-------------------- -- Harry Danilevsky harry.danilev...@gmail.com 2. Used Components and their Configuration: *** mod_perl version 2.000004 *** using /data/wre/prereqs/lib/perl5/site_perl/5.10.0/i686-linux/Apache2/BuildConfig.pm *** Makefile.PL options: MP_APR_LIB => aprext MP_APXS => /data/wre/prereqs/bin/apxs MP_COMPAT_1X => 1 MP_GENERATE_XS => 1 MP_LIBNAME => mod_perl MP_USE_DSO => 1 *** The httpd binary was not found *** (apr|apu)-config linking info -L/data/wre/prereqs/lib -laprutil-1 -lexpat -L/data/wre/prereqs/lib -lapr-1 -lrt -lcrypt -lpthread -ldl *** /data/wre/prereqs/bin/perl -V Summary of my perl5 (revision 5 version 10 subversion 0) configuration: Platform: osname=linux, osvers=2.4.21-51.el, archname=i686-linux uname='linux centos3 2.4.21-51.el #1 thu aug 16 17:03:59 edt 2007 i686 i686 i386 gnulinux ' config_args='-Dprefix=/data/wre/prereqs -des' hint=recommended, useposix=true, d_sigaction=define useithreads=undef, usemultiplicity=undef useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef use64bitint=undef, use64bitall=undef, uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='cc', ccflags ='-fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64', optimize='-O2', cppflags='-fno-strict-aliasing -pipe -I/usr/local/include' ccversion='', gccversion='3.2.3 20030502 (Red Hat Linux 3.2.3-59)', gccosandvers='' intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12 ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8 alignbytes=4, prototype=define Linker and Libraries: ld='cc', ldflags =' -L/usr/local/lib' libpth=/usr/local/lib /lib /usr/lib libs=-lnsl -ldl -lm -lcrypt -lutil -lc perllibs=-lnsl -ldl -lm -lcrypt -lutil -lc libc=/lib/libc-2.3.2.so, so=so, useshrplib=false, libperl=libperl.a gnulibc_version='2.3.2' Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E' cccdlflags='-fPIC', lddlflags='-shared -O2 -L/usr/local/lib' Characteristics of this binary (from libperl): Compile-time options: PERL_DONT_CREATE_GVSV PERL_MALLOC_WRAP USE_LARGE_FILES USE_PERLIO Built under linux Compiled at May 27 2009 20:31:04 %ENV: PERL_LWP_USE_HTTP_10="1" @INC: /data/wre/prereqs/lib/perl5/5.10.0/i686-linux /data/wre/prereqs/lib/perl5/5.10.0 /data/wre/prereqs/lib/perl5/site_perl/5.10.0/i686-linux /data/wre/prereqs/lib/perl5/site_perl/5.10.0 . *** Packages of interest status: Apache2 : - Apache2::Request : 2.08 CGI : 3.42 ExtUtils::MakeMaker: 6.48 LWP : 5.824 mod_perl : - mod_perl2 : 2.000004 3. This is the core dump trace: (if you get a core dump): This report was generated by bin/mp2bug on Mon Nov 30 17:25:35 2009 GMT.