mirror of
https://github.com/SagerNet/sing-box.git
synced 2026-04-14 20:58:33 +10:00
47 lines
1.2 KiB
Go
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
|
|
}
|