@@ -29,23 +29,29 @@ type InMemoryToolRepository struct {
2929 mu sync.RWMutex // for concurrent access
3030}
3131
32- func (r InMemoryToolRepository ) GetProvider (ctx context.Context , providerName string ) (* Provider , error ) {
32+ func (r * InMemoryToolRepository ) GetProvider (ctx context.Context , providerName string ) (* Provider , error ) {
33+ r .mu .RLock ()
34+ defer r .mu .RUnlock ()
3335 provider , ok := r .Providers [providerName ]
3436 if ! ok {
3537 return nil , nil
3638 }
3739 return & provider , nil
3840}
3941
40- func (r InMemoryToolRepository ) GetProviders (ctx context.Context ) ([]Provider , error ) {
42+ func (r * InMemoryToolRepository ) GetProviders (ctx context.Context ) ([]Provider , error ) {
43+ r .mu .RLock ()
44+ defer r .mu .RUnlock ()
4145 var providers []Provider
4246 for _ , p := range r .Providers {
4347 providers = append (providers , p )
4448 }
4549 return providers , nil
4650}
4751
48- func (r InMemoryToolRepository ) GetTool (ctx context.Context , toolName string ) (* Tool , error ) {
52+ func (r * InMemoryToolRepository ) GetTool (ctx context.Context , toolName string ) (* Tool , error ) {
53+ r .mu .RLock ()
54+ defer r .mu .RUnlock ()
4955 for _ , tools := range r .Tools {
5056 for _ , tool := range tools {
5157 if tool .Name == toolName {
@@ -56,23 +62,29 @@ func (r InMemoryToolRepository) GetTool(ctx context.Context, toolName string) (*
5662 return nil , nil
5763}
5864
59- func (r InMemoryToolRepository ) GetTools (ctx context.Context ) ([]Tool , error ) {
65+ func (r * InMemoryToolRepository ) GetTools (ctx context.Context ) ([]Tool , error ) {
66+ r .mu .RLock ()
67+ defer r .mu .RUnlock ()
6068 var all []Tool
6169 for _ , tools := range r .Tools {
6270 all = append (all , tools ... )
6371 }
6472 return all , nil
6573}
6674
67- func (r InMemoryToolRepository ) GetToolsByProvider (ctx context.Context , providerName string ) ([]Tool , error ) {
75+ func (r * InMemoryToolRepository ) GetToolsByProvider (ctx context.Context , providerName string ) ([]Tool , error ) {
76+ r .mu .RLock ()
77+ defer r .mu .RUnlock ()
6878 tools , ok := r .Tools [providerName ]
6979 if ! ok {
7080 return nil , fmt .Errorf ("no tools found for provider %s" , providerName )
7181 }
7282 return tools , nil
7383}
7484
75- func (r InMemoryToolRepository ) RemoveProvider (ctx context.Context , providerName string ) error {
85+ func (r * InMemoryToolRepository ) RemoveProvider (ctx context.Context , providerName string ) error {
86+ r .mu .Lock ()
87+ defer r .mu .Unlock ()
7688 if _ , ok := r .Providers [providerName ]; ! ok {
7789 return fmt .Errorf ("provider not found: %s" , providerName )
7890 }
@@ -81,7 +93,9 @@ func (r InMemoryToolRepository) RemoveProvider(ctx context.Context, providerName
8193 return nil
8294}
8395
84- func (r InMemoryToolRepository ) RemoveTool (ctx context.Context , toolName string ) error {
96+ func (r * InMemoryToolRepository ) RemoveTool (ctx context.Context , toolName string ) error {
97+ r .mu .Lock ()
98+ defer r .mu .Unlock ()
8599 for providerName , tools := range r .Tools {
86100 for i , tool := range tools {
87101 if tool .Name == toolName {
@@ -99,6 +113,8 @@ func (r *InMemoryToolRepository) SaveProviderWithTools(ctx context.Context, prov
99113 return ctx .Err ()
100114 default :
101115 }
116+ r .mu .Lock ()
117+ defer r .mu .Unlock ()
102118 var providerName string
103119 switch p := provider .(type ) {
104120 case * CliProvider :
0 commit comments