From bfb371d0c2f543c7dd5ee4afa112a6546c886ec2 Mon Sep 17 00:00:00 2001 From: Carl Baldwin Date: Fri, 11 Oct 2019 13:32:21 -0600 Subject: Avoid locking in cases that return immediately This just defers the read lock over some of the code that doesn't inspect or modify any RoutingPolicy data. It allows the early returns to happen without ever taking the read lock. --- internal/pkg/table/policy.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'internal/pkg/table') diff --git a/internal/pkg/table/policy.go b/internal/pkg/table/policy.go index 3ced3b96..3395863d 100644 --- a/internal/pkg/table/policy.go +++ b/internal/pkg/table/policy.go @@ -3109,9 +3109,6 @@ type RoutingPolicy struct { } func (r *RoutingPolicy) ApplyPolicy(id string, dir PolicyDirection, before *Path, options *PolicyOptions) *Path { - r.mu.RLock() - defer r.mu.RUnlock() - if before == nil { return nil } @@ -3121,6 +3118,10 @@ func (r *RoutingPolicy) ApplyPolicy(id string, dir PolicyDirection, before *Path } result := ROUTE_TYPE_NONE after := before + + r.mu.RLock() + defer r.mu.RUnlock() + for _, p := range r.getPolicy(id, dir) { result, after = p.Apply(after, options) if result != ROUTE_TYPE_NONE { -- cgit v1.2.3