Subject: Re: kern/36153: getrusage(2) not working?
To: None <kern-bug-people@netbsd.org, gnats-admin@netbsd.org,>
From: Juan RP <juan@xtrarom.org>
List: netbsd-bugs
Date: 04/16/2007 11:45:01
The following reply was made to PR kern/36153; it has been noted by GNATS.

From: Juan RP <juan@xtrarom.org>
To: gnats-bugs@NetBSD.org
Cc: netbsd-bugs@netbsd.org
Subject: Re: kern/36153: getrusage(2) not working?
Date: Mon, 16 Apr 2007 13:41:28 +0200

 On Mon, 16 Apr 2007 10:45:01 +0000 (UTC)
 juan@xtrarom.org wrote:
 
 Erm... that should be getrlimit(2).
 
 Can anyone explain that?
                                                                                          
 time(cpu-seconds)    unlimited
 file(blocks)         unlimited
 coredump(blocks)     unlimited
 data(kbytes)         524288
 stack(kbytes)        4096
 lockedmem(kbytes)    669930
 memory(kbytes)       1048576
 nofiles(descriptors) 64
 processes            64
 sbsize(bytes)        unlimited
 
 $ echo $((536870912/1024))
 524288
 
 $ ./setlimit 546870912
 rlim_cur (after) =536870912
 rlim_max (before) =536870912
 Unknown error: 4294967295
 
 $ ./setlimit 526870912 
 rlim_cur (after) =536870912
 rlim_max (before) =536870912
 rlim_cur (after) =526870912
 rlim_max (before) =536870912
 
 $ ./setlimit 516870912 
 rlim_cur (after) =536870912
 rlim_max (before) =536870912
 rlim_cur (after) =516870912
 rlim_max (before) =536870912
 $
 
 
 $ cat setlimit.c 
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <limits.h>
 #include <err.h>
 #include <errno.h>
 #include <sys/resource.h>
 
 int main(int argc, char **argv)
 {
         struct rlimit rlim;
         char *buf;
         int rval = 0;
 
         if (argc != 2)
            return EINVAL;
 
         if ((getrlimit(RLIMIT_DATA, &rlim)) < 0)
            perror("getrlimit");
 
         printf("rlim_cur (after) =%ld\n", rlim.rlim_cur);
         printf("rlim_max (before) =%ld\n", rlim.rlim_max);
 
         rlim.rlim_cur = strtol(argv[1], &buf, 10);
         if (*buf != '\0')
            err(EINVAL, "not a number");
 
         if ((rval = setrlimit(RLIMIT_DATA, &rlim)) < 0) {
            printf("%s\n", strerror(rval));
            return rval;
         }
 
         if ((getrlimit(RLIMIT_DATA, &rlim)) < 0)
            perror("getrlimit");
 
         printf("rlim_cur (after) =%ld\n", rlim.rlim_cur);
         printf("rlim_max (before) =%ld\n", rlim.rlim_max);
 
         return 0;
 }
 
 ktruss reports:
 
  29237      1 setlimit setrlimit(0x2, 0x7f7fffffe830) = 0
  29237      1 setlimit getrlimit(0x2, 0x7f7fffffe830) = 0
 
 -- 
 http://plog.xtrarom.org/
 Juan RP's blog - NetBSD/pkgsrc news in Spanish