Files
sing-box/service/oomkiller/policy.go
2026-04-06 23:36:06 +08:00

47 lines
1.2 KiB
Go

package oomkiller
import (
"context"
"github.com/sagernet/sing-box/adapter"
C "github.com/sagernet/sing-box/constant"
"github.com/sagernet/sing-box/option"
"github.com/sagernet/sing/common/memory"
"github.com/sagernet/sing/service"
)
const DefaultAppleNetworkExtensionMemoryLimit = 50 * 1024 * 1024
type policyMode uint8
const (
policyModeNone policyMode = iota
policyModeMemoryLimit
policyModeAvailable
policyModeNetworkExtension
)
func (m policyMode) hasTimerMode() bool {
return m != policyModeNone
}
func resolvePolicyMode(ctx context.Context, options option.OOMKillerServiceOptions) (uint64, policyMode) {
platformInterface := service.FromContext[adapter.PlatformInterface](ctx)
if C.IsIos && platformInterface != nil && platformInterface.UnderNetworkExtension() {
return DefaultAppleNetworkExtensionMemoryLimit, policyModeNetworkExtension
}
if options.MemoryLimitOverride > 0 {
return options.MemoryLimitOverride, policyModeMemoryLimit
}
if options.MemoryLimit != nil {
memoryLimit := options.MemoryLimit.Value()
if memoryLimit > 0 {
return memoryLimit, policyModeMemoryLimit
}
}
if memory.AvailableAvailable() {
return 0, policyModeAvailable
}
return 0, policyModeNone
}