Skip to content

Commit 351ab7e

Browse files
committed
libct/cap: switch to lazy init
A map which is created in func init is only used by capSlice, which is only used by New, which is only used by runc init. Switch to lazy init to slightly save on startup time. Signed-off-by: Kir Kolyshkin <[email protected]>
1 parent 3778ae6 commit 351ab7e

File tree

1 file changed

+9
-5
lines changed

1 file changed

+9
-5
lines changed

libcontainer/capabilities/capabilities.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ package capabilities
55
import (
66
"sort"
77
"strings"
8+
"sync"
89

910
"github.com/opencontainers/runc/libcontainer/configs"
1011
"github.com/sirupsen/logrus"
@@ -14,24 +15,26 @@ import (
1415
const allCapabilityTypes = capability.CAPS | capability.BOUNDING | capability.AMBIENT
1516

1617
var (
17-
capabilityMap map[string]capability.Cap
18-
capTypes = []capability.CapType{
18+
capTypes = []capability.CapType{
1919
capability.BOUNDING,
2020
capability.PERMITTED,
2121
capability.INHERITABLE,
2222
capability.EFFECTIVE,
2323
capability.AMBIENT,
2424
}
25+
capMap = sync.OnceValue(initCapMap)
2526
)
2627

27-
func init() {
28-
capabilityMap = make(map[string]capability.Cap, capability.CAP_LAST_CAP+1)
28+
// Do not call directly, use capMap instead.
29+
func initCapMap() map[string]capability.Cap {
30+
capabilityMap := make(map[string]capability.Cap, capability.CAP_LAST_CAP+1)
2931
for _, c := range capability.List() {
3032
if c > capability.CAP_LAST_CAP {
3133
continue
3234
}
3335
capabilityMap["CAP_"+strings.ToUpper(c.String())] = c
3436
}
37+
return capabilityMap
3538
}
3639

3740
// KnownCapabilities returns the list of the known capabilities.
@@ -78,9 +81,10 @@ func New(capConfig *configs.Capabilities) (*Caps, error) {
7881
// equivalent, and returns them as a slice. Unknown or unavailable capabilities
7982
// are not returned, but appended to unknownCaps.
8083
func capSlice(caps []string, unknownCaps map[string]struct{}) []capability.Cap {
84+
cMap := capMap()
8185
var out []capability.Cap
8286
for _, c := range caps {
83-
if v, ok := capabilityMap[c]; !ok {
87+
if v, ok := cMap[c]; !ok {
8488
unknownCaps[c] = struct{}{}
8589
} else {
8690
out = append(out, v)

0 commit comments

Comments
 (0)