Skip to content

Commit eff4b2e

Browse files
committed
refactor: use global sync.Pool instead of member variables to avoid struct size increase
1 parent 7351a29 commit eff4b2e

File tree

1 file changed

+7
-9
lines changed

1 file changed

+7
-9
lines changed

enforcer.go

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,6 @@ type Enforcer struct {
5757
autoNotifyDispatcher bool
5858
acceptJsonRequest bool
5959

60-
policyEffectsPool sync.Pool
61-
matcherResultsPool sync.Pool
62-
6360
aiConfig AIConfig
6461
}
6562

@@ -190,8 +187,6 @@ func (e *Enforcer) initialize() {
190187
e.eft = effector.NewDefaultEffector()
191188
e.watcher = nil
192189
e.matcherMap = sync.Map{}
193-
e.policyEffectsPool = sync.Pool{New: func() interface{} { return &policyEffectsBuffer{values: make([]effector.Effect, 0)} }}
194-
e.matcherResultsPool = sync.Pool{New: func() interface{} { return &matcherResultsBuffer{values: make([]float64, 0)} }}
195190

196191
e.enabled = true
197192
e.autoSave = true
@@ -692,8 +687,11 @@ type matcherResultsBuffer struct {
692687
values []float64
693688
}
694689

690+
var globalPolicyEffectsPool = sync.Pool{New: func() interface{} { return &policyEffectsBuffer{values: make([]effector.Effect, 0)} }}
691+
var globalMatcherResultsPool = sync.Pool{New: func() interface{} { return &matcherResultsBuffer{values: make([]float64, 0)} }}
692+
695693
func (e *Enforcer) getPolicyEffectsBuffer(size int) ([]effector.Effect, *policyEffectsBuffer) {
696-
buffer := e.policyEffectsPool.Get().(*policyEffectsBuffer)
694+
buffer := globalPolicyEffectsPool.Get().(*policyEffectsBuffer)
697695
if cap(buffer.values) < size {
698696
buffer.values = make([]effector.Effect, size)
699697
} else {
@@ -704,11 +702,11 @@ func (e *Enforcer) getPolicyEffectsBuffer(size int) ([]effector.Effect, *policyE
704702

705703
func (e *Enforcer) putPolicyEffectsBuffer(buffer *policyEffectsBuffer) {
706704
buffer.values = buffer.values[:0]
707-
e.policyEffectsPool.Put(buffer)
705+
globalPolicyEffectsPool.Put(buffer)
708706
}
709707

710708
func (e *Enforcer) getMatcherResultsBuffer(size int) ([]float64, *matcherResultsBuffer) {
711-
buffer := e.matcherResultsPool.Get().(*matcherResultsBuffer)
709+
buffer := globalMatcherResultsPool.Get().(*matcherResultsBuffer)
712710
if cap(buffer.values) < size {
713711
buffer.values = make([]float64, size)
714712
} else {
@@ -719,7 +717,7 @@ func (e *Enforcer) getMatcherResultsBuffer(size int) ([]float64, *matcherResults
719717

720718
func (e *Enforcer) putMatcherResultsBuffer(buffer *matcherResultsBuffer) {
721719
buffer.values = buffer.values[:0]
722-
e.matcherResultsPool.Put(buffer)
720+
globalMatcherResultsPool.Put(buffer)
723721
}
724722

725723
// enforce use a custom matcher to decides whether a "subject" can access a "object" with the operation "action", input parameters are usually: (matcher, sub, obj, act), use model matcher by default when matcher is "".

0 commit comments

Comments
 (0)