]> mj.ucw.cz Git - libucw.git/commitdiff
Perl module for setting ulimits.
authorTomas Valla <tom@ucw.cz>
Sat, 25 Oct 2003 19:22:57 +0000 (19:22 +0000)
committerTomas Valla <tom@ucw.cz>
Sat, 25 Oct 2003 19:22:57 +0000 (19:22 +0000)
Should solve bug #538.
[warning - compiling perlXS is ugly ;) ]

lib/perl/Makefile
lib/perl/Ulimit/MANIFEST [new file with mode: 0644]
lib/perl/Ulimit/Makefile [new file with mode: 0644]
lib/perl/Ulimit/Makefile.PL [new file with mode: 0644]
lib/perl/Ulimit/Ulimit.pm [new file with mode: 0644]
lib/perl/Ulimit/Ulimit.xs [new file with mode: 0644]

index 3b9e9257d763418c55db4eb35f5094c62f2f7fea..eceb6f697e5057232b5c7e394d8bb743b7288bf9 100644 (file)
@@ -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 (file)
index 0000000..f54d37e
--- /dev/null
@@ -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 (file)
index 0000000..0284819
--- /dev/null
@@ -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 (file)
index 0000000..1a8d713
--- /dev/null
@@ -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 (file)
index 0000000..f368555
--- /dev/null
@@ -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 (file)
index 0000000..94ac857
--- /dev/null
@@ -0,0 +1,89 @@
+#include "EXTERN.h"
+#include "perl.h"
+#include "XSUB.h"
+
+#include <sys/resource.h>
+#include <unistd.h>
+
+
+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
+
+