]> Cypherpunks repositories - gostls13.git/commitdiff
syscall: prlimit argument error for Getrlimit and Setrlimit on Linux 32-bit
authorPeter Mundy <go.peter.90@gmail.com>
Thu, 25 Jul 2013 13:56:06 +0000 (09:56 -0400)
committerRuss Cox <rsc@golang.org>
Thu, 25 Jul 2013 13:56:06 +0000 (09:56 -0400)
The rlimit arguments for prlimit are reversed for linux 32-bit (386 and arm).
Getrlimit becomes Setrlimit and vice versa.
Fixes #5949.

R=iant, mikioh.mikioh, rsc
CC=golang-dev
https://golang.org/cl/11803043

src/pkg/syscall/rlimit_linux_test.go [new file with mode: 0644]
src/pkg/syscall/syscall_linux_386.go
src/pkg/syscall/syscall_linux_arm.go

diff --git a/src/pkg/syscall/rlimit_linux_test.go b/src/pkg/syscall/rlimit_linux_test.go
new file mode 100644 (file)
index 0000000..4ec720e
--- /dev/null
@@ -0,0 +1,41 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package syscall_test
+
+import (
+       "syscall"
+       "testing"
+)
+
+func TestRlimit(t *testing.T) {
+       var rlimit, zero syscall.Rlimit
+       err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rlimit)
+       if err != nil {
+               t.Fatalf("Getrlimit: save failed: %v", err)
+       }
+       if zero == rlimit {
+               t.Fatalf("Getrlimit: save failed: got zero value %#v", rlimit)
+       }
+       set := rlimit
+       set.Cur = set.Max - 1
+       err = syscall.Setrlimit(syscall.RLIMIT_NOFILE, &set)
+       if err != nil {
+               t.Fatalf("Setrlimit: set failed: %#v %v", set, err)
+       }
+       var get syscall.Rlimit
+       err = syscall.Getrlimit(syscall.RLIMIT_NOFILE, &get)
+       if err != nil {
+               t.Fatalf("Getrlimit: get failed: %v", err)
+       }
+       set = rlimit
+       set.Cur = set.Max - 1
+       if set != get {
+               t.Fatalf("Rlimit: change failed: wanted %#v got %#v", set, get)
+       }
+       err = syscall.Setrlimit(syscall.RLIMIT_NOFILE, &rlimit)
+       if err != nil {
+               t.Fatalf("Setrlimit: restore failed: %#v %v", rlimit, err)
+       }
+}
index a0ded43dcf0b84c2afef860ca7d9a8adc5590422..a61695676f98b101783f2675420b8f44db052ad8 100644 (file)
@@ -78,7 +78,7 @@ const rlimInf32 = ^uint32(0)
 const rlimInf64 = ^uint64(0)
 
 func Getrlimit(resource int, rlim *Rlimit) (err error) {
-       err = prlimit(0, resource, rlim, nil)
+       err = prlimit(0, resource, nil, rlim)
        if err != ENOSYS {
                return err
        }
@@ -106,7 +106,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) {
 //sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT
 
 func Setrlimit(resource int, rlim *Rlimit) (err error) {
-       err = prlimit(0, resource, nil, rlim)
+       err = prlimit(0, resource, rlim, nil)
        if err != ENOSYS {
                return err
        }
index 7839d528827568b0e78ccaffda5ec498556bf684..4aadf9e4c1eec59b4bfa74cc0a98734f6ffb3b10 100644 (file)
@@ -119,7 +119,7 @@ const rlimInf32 = ^uint32(0)
 const rlimInf64 = ^uint64(0)
 
 func Getrlimit(resource int, rlim *Rlimit) (err error) {
-       err = prlimit(0, resource, rlim, nil)
+       err = prlimit(0, resource, nil, rlim)
        if err != ENOSYS {
                return err
        }
@@ -147,7 +147,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) {
 //sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT
 
 func Setrlimit(resource int, rlim *Rlimit) (err error) {
-       err = prlimit(0, resource, nil, rlim)
+       err = prlimit(0, resource, rlim, nil)
        if err != ENOSYS {
                return err
        }