From 483c239d0dca06c73ce9b5a77f4ef766e3771c87 Mon Sep 17 00:00:00 2001 From: Tomas Valla Date: Sat, 25 Oct 2003 19:22:57 +0000 Subject: [PATCH] Perl module for setting ulimits. Should solve bug #538. [warning - compiling perlXS is ugly ;) ] --- lib/perl/Makefile | 4 ++ lib/perl/Ulimit/MANIFEST | 5 +++ lib/perl/Ulimit/Makefile | 22 +++++++++ lib/perl/Ulimit/Makefile.PL | 11 +++++ lib/perl/Ulimit/Ulimit.pm | 47 ++++++++++++++++++++ lib/perl/Ulimit/Ulimit.xs | 89 +++++++++++++++++++++++++++++++++++++ 6 files changed, 178 insertions(+) create mode 100644 lib/perl/Ulimit/MANIFEST create mode 100644 lib/perl/Ulimit/Makefile create mode 100644 lib/perl/Ulimit/Makefile.PL create mode 100644 lib/perl/Ulimit/Ulimit.pm create mode 100644 lib/perl/Ulimit/Ulimit.xs diff --git a/lib/perl/Makefile b/lib/perl/Makefile index 3b9e9257..eceb6f69 100644 --- a/lib/perl/Makefile +++ b/lib/perl/Makefile @@ -2,3 +2,7 @@ DIRS+=lib/perl PROGS+=$(addprefix obj/lib/perl/,Config.pm Query.pm CGI.pm) + +ifdef CONFIG_WATSON +include lib/perl/Ulimit/Makefile +endif diff --git a/lib/perl/Ulimit/MANIFEST b/lib/perl/Ulimit/MANIFEST new file mode 100644 index 00000000..f54d37e0 --- /dev/null +++ b/lib/perl/Ulimit/MANIFEST @@ -0,0 +1,5 @@ +Makefile +Makefile.PL +MANIFEST +Ulimit.pm +Ulimit.xs diff --git a/lib/perl/Ulimit/Makefile b/lib/perl/Ulimit/Makefile new file mode 100644 index 00000000..02848195 --- /dev/null +++ b/lib/perl/Ulimit/Makefile @@ -0,0 +1,22 @@ +# Perl modules + +DIRS+=lib/perl/Ulimit/arch/auto/Sherlock/Ulimit + + +ULIMIT_DIR=lib/perl/Ulimit + +PROGS+=obj/lib/perl/Ulimit/Ulimit.pm +DATAFILES+=obj/lib/perl/Ulimit/arch/auto/Sherlock/Ulimit/Ulimit.so + + +lib/perl/Ulimit/arch/auto/Sherlock/Ulimit/Ulimit.so: $(ULIMIT_DIR)/Ulimit.xs $(ULIMIT_DIR)/Ulimit.pm $(ULIMIT_DIR)/Makefile.tmp + cd $(ULIMIT_DIR) && $(MAKE) -f Makefile.tmp + +$(ULIMIT_DIR)/Makefile.tmp: $(ULIMIT_DIR)/Makefile.PL + cd $(ULIMIT_DIR) && perl Makefile.PL + + +clean:: + cd $(ULIMIT_DIR) && if [ -f Makefile.tmp ]; then $(MAKE) -f Makefile.tmp distclean; fi && rm -rf lib arch + + diff --git a/lib/perl/Ulimit/Makefile.PL b/lib/perl/Ulimit/Makefile.PL new file mode 100644 index 00000000..1a8d713d --- /dev/null +++ b/lib/perl/Ulimit/Makefile.PL @@ -0,0 +1,11 @@ +use ExtUtils::MakeMaker; +# See lib/ExtUtils/MakeMaker.pm for details of how to influence +# the contents of the Makefile that is written. +WriteMakefile( + 'NAME' => 'Sherlock::Ulimit', + 'MAKEFILE' => 'Makefile.tmp', + 'VERSION_FROM' => 'Ulimit.pm', + 'INST_LIB' => 'lib', + 'INST_ARCHLIB' => 'arch', + #'PREFIX' => '.', +); diff --git a/lib/perl/Ulimit/Ulimit.pm b/lib/perl/Ulimit/Ulimit.pm new file mode 100644 index 00000000..f3685555 --- /dev/null +++ b/lib/perl/Ulimit/Ulimit.pm @@ -0,0 +1,47 @@ +package Sherlock::Ulimit; + +use 5.006; +use strict; +use warnings; + +require Exporter; +require DynaLoader; + +our @ISA = qw(Exporter DynaLoader); +unshift @DynaLoader::dl_library_path, "lib"; + +# Items to export into callers namespace by default. Note: do not export +# names by default without a very good reason. Use EXPORT_OK instead. +# Do not simply export all your public functions/methods/constants. + +our $CPU = 0; +our $FSIZE = 1; +our $DATA = 2; +our $STACK = 3; +our $CORE = 4; +our $RSS = 5; +our $NPROC = 6; +our $NOFILE = 7; +our $MEMLOCK = 8; +our $AS = 9; + + +# This allows declaration use Ulimit ':all'; +# If you do not need this, moving things directly into @EXPORT or @EXPORT_OK +# will save memory. +our %EXPORT_TAGS = ( 'all' => [ qw( + +) ] ); + +our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); + +our @EXPORT = qw( +); +our $VERSION = '0.01'; + +bootstrap Sherlock::Ulimit $VERSION; + +# Preloaded methods go here. + +1; +__END__ diff --git a/lib/perl/Ulimit/Ulimit.xs b/lib/perl/Ulimit/Ulimit.xs new file mode 100644 index 00000000..94ac8573 --- /dev/null +++ b/lib/perl/Ulimit/Ulimit.xs @@ -0,0 +1,89 @@ +#include "EXTERN.h" +#include "perl.h" +#include "XSUB.h" + +#include +#include + + +MODULE = Sherlock::Ulimit PACKAGE = Sherlock::Ulimit + +PROTOTYPES: ENABLED + +int +setlimit(IN resource, IN soft, IN hard) + int resource + int soft + int hard +CODE: + struct rlimit rl; + int r; + + switch(resource) { + case 0: + r = RLIMIT_CPU; break; + case 1: + r = RLIMIT_FSIZE; break; + case 2: + r = RLIMIT_DATA; break; + case 3: + r = RLIMIT_STACK; break; + case 4: + r = RLIMIT_CORE; break; + case 5: + r = RLIMIT_RSS; break; + case 6: + r = RLIMIT_NPROC; break; + case 7: + r = RLIMIT_NOFILE; break; + case 8: + r = RLIMIT_MEMLOCK; break; + case 9: + r = RLIMIT_AS; break; + } + rl.rlim_cur = soft; + rl.rlim_max = hard; + RETVAL = setrlimit(r, &rl); +OUTPUT: + RETVAL + + +int +getlimit(IN resource, OUT soft, OUT hard) + int resource + int soft + int hard +CODE: + struct rlimit rl; + int r; + + switch(resource) { + case 0: + r = RLIMIT_CPU; break; + case 1: + r = RLIMIT_FSIZE; break; + case 2: + r = RLIMIT_DATA; break; + case 3: + r = RLIMIT_STACK; break; + case 4: + r = RLIMIT_CORE; break; + case 5: + r = RLIMIT_RSS; break; + case 6: + r = RLIMIT_NPROC; break; + case 7: + r = RLIMIT_NOFILE; break; + case 8: + r = RLIMIT_MEMLOCK; break; + case 9: + r = RLIMIT_AS; break; + } + + RETVAL = getrlimit(r, &rl); + soft = rl.rlim_cur; + hard = rl.rlim_max; +OUTPUT: + RETVAL + + -- 2.39.2