blob: 0e2048ed5123832a6d945e906a68b6b083d88f89 [file] [log] [blame]
// Copyright 2017 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.
//go:build netbsd || openbsd
package main
import (
"fmt"
"log"
"os"
"runtime"
"golang.org/x/sys/unix"
)
func init() {
switch runtime.GOOS {
case "netbsd":
setOSRlimit = setNetBSDRlimit
case "openbsd":
setOSRlimit = setOpenBSDRlimit
}
}
// setNetBSDRlimit sets limits for NetBSD.
// See https://github.com/golang/go/issues/22871#issuecomment-346888363
func setNetBSDRlimit() error {
limit := unix.Rlimit{
Cur: unix.RLIM_INFINITY,
Max: unix.RLIM_INFINITY,
}
if err := unix.Setrlimit(unix.RLIMIT_DATA, &limit); err != nil && os.Getuid() == 0 {
return err
}
return nil
}
// setOpenBSDRlimit sets limits for OpenBSD.
// See https://go-review.googlesource.com/c/go/+/81876
func setOpenBSDRlimit() error {
var lim unix.Rlimit
if err := unix.Getrlimit(unix.RLIMIT_NOFILE, &lim); err != nil {
return fmt.Errorf("getting initial rlimit: %v", err)
}
log.Printf("initial NOFILE rlimit: %+v", lim)
lim.Cur = 32 << 10
lim.Max = 32 << 10
if err := unix.Setrlimit(unix.RLIMIT_NOFILE, &lim); err != nil && os.Getuid() == 0 {
return fmt.Errorf("Setrlimit: %v", err)
}
if err := unix.Getrlimit(unix.RLIMIT_NOFILE, &lim); err != nil {
return fmt.Errorf("getting updated rlimit: %v", err)
}
log.Printf("updated NOFILE rlimit: %+v", lim)
return nil
}