66 "errors"
77 "fmt"
88 "strings"
9+ "sync"
910
1011 management "github.com/Axway/agent-sdk/pkg/apic/apiserver/models/management/v1alpha1"
1112 "github.com/Axway/agent-sdk/pkg/util"
@@ -74,7 +75,10 @@ type SpecResourceParser struct {
7475type newSpecParserFunc func (resourceSpec []byte , resourceSpecType string ) SpecResourceParser
7576type specParserOpt func (* SpecResourceParser )
7677
77- var NewSpecResourceParser newSpecParserFunc = newSpecResourceParser ()
78+ var (
79+ specParserFactoryMu sync.RWMutex
80+ NewSpecResourceParser newSpecParserFunc = newSpecResourceParser ()
81+ )
7882
7983func WithTagsToStrip (tags []string ) specParserOpt {
8084 return func (sp * SpecResourceParser ) {
@@ -83,9 +87,20 @@ func WithTagsToStrip(tags []string) specParserOpt {
8387}
8488
8589func NewSpecResourceParserFactory (opts ... specParserOpt ) {
90+ specParserFactoryMu .Lock ()
91+ defer specParserFactoryMu .Unlock ()
92+
8693 NewSpecResourceParser = newSpecResourceParser (opts ... )
8794}
8895
96+ func newParser (resourceSpec []byte , resourceSpecType string ) SpecResourceParser {
97+ specParserFactoryMu .RLock ()
98+ parserConstructor := NewSpecResourceParser
99+ specParserFactoryMu .RUnlock ()
100+
101+ return parserConstructor (resourceSpec , resourceSpecType )
102+ }
103+
89104func newSpecResourceParser (opts ... specParserOpt ) newSpecParserFunc {
90105 return func (resourceSpec []byte , resourceSpecType string ) SpecResourceParser {
91106 hash , _ := util .ComputeHash (resourceSpec )
0 commit comments