Skip to content

Commit f61e203

Browse files
committed
cmd/utils: fix build on *BSD
1 parent f821b01 commit f61e203

File tree

2 files changed

+55
-1
lines changed

2 files changed

+55
-1
lines changed

cmd/utils/fdlimit_freebsd.go

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
// Copyright 2016 The go-ethereum Authors
2+
// This file is part of go-ethereum.
3+
//
4+
// go-ethereum is free software: you can redistribute it and/or modify
5+
// it under the terms of the GNU General Public License as published by
6+
// the Free Software Foundation, either version 3 of the License, or
7+
// (at your option) any later version.
8+
//
9+
// go-ethereum is distributed in the hope that it will be useful,
10+
// but WITHOUT ANY WARRANTY; without even the implied warranty of
11+
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12+
// GNU General Public License for more details.
13+
//
14+
// You should have received a copy of the GNU General Public License
15+
// along with go-ethereum. If not, see <http://www.gnu.org/licenses/>.
16+
17+
// +build freebsd
18+
19+
package utils
20+
21+
import "syscall"
22+
23+
// This file is largely identical to fdlimit_unix.go,
24+
// but Rlimit fields have type int64 on FreeBSD so it needs
25+
// an extra conversion.
26+
27+
// raiseFdLimit tries to maximize the file descriptor allowance of this process
28+
// to the maximum hard-limit allowed by the OS.
29+
func raiseFdLimit(max uint64) error {
30+
// Get the current limit
31+
var limit syscall.Rlimit
32+
if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil {
33+
return err
34+
}
35+
// Try to update the limit to the max allowance
36+
limit.Cur = limit.Max
37+
if limit.Cur > int64(max) {
38+
limit.Cur = int64(max)
39+
}
40+
if err := syscall.Setrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil {
41+
return err
42+
}
43+
return nil
44+
}
45+
46+
// getFdLimit retrieves the number of file descriptors allowed to be opened by this
47+
// process.
48+
func getFdLimit() (int, error) {
49+
var limit syscall.Rlimit
50+
if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil {
51+
return 0, err
52+
}
53+
return int(limit.Cur), nil
54+
}

cmd/utils/fdlimit_unix.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
// You should have received a copy of the GNU General Public License
1515
// along with go-ethereum. If not, see <http://www.gnu.org/licenses/>.
1616

17-
// +build linux darwin
17+
// +build linux darwin netbsd openbsd solaris
1818

1919
package utils
2020

0 commit comments

Comments
 (0)