From 9e863ba726681ea61290ab332ec870c48dfdf10b Mon Sep 17 00:00:00 2001 From: wangzhouquan Date: Sun, 12 Oct 2025 22:21:45 +0800 Subject: [PATCH] avoid concurrent issues --- go/internal/registry/registry.go | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/go/internal/registry/registry.go b/go/internal/registry/registry.go index 3037ec4eac..928d22ac6b 100644 --- a/go/internal/registry/registry.go +++ b/go/internal/registry/registry.go @@ -63,7 +63,7 @@ func (r *Registry) NewChild() api.Registry { actions: map[string]api.Action{}, plugins: map[string]api.Plugin{}, values: map[string]any{}, - dotprompt: r.dotprompt, + dotprompt: deepCopyDotPrompt(r.dotprompt), } return child } @@ -316,5 +316,16 @@ func (r *Registry) RegisterHelper(name string, fn any) { func (r *Registry) Dotprompt() *dotprompt.Dotprompt { r.mu.RLock() defer r.mu.RUnlock() - return r.dotprompt + return deepCopyDotPrompt(r.dotprompt) +} + +func deepCopyDotPrompt(dot *dotprompt.Dotprompt) *dotprompt.Dotprompt { + newDot := dotprompt.NewDotprompt(&dotprompt.DotpromptOptions{ + Helpers: make(map[string]any), + Partials: make(map[string]string), + }) + maps.Copy(newDot.Helpers, dot.Helpers) + maps.Copy(newDot.Partials, dot.Partials) + maps.Copy(newDot.Schemas, dot.Schemas) + return newDot }