fix(ui): add locking around markdown rendering

Evan Wies created

Needed to prevent race conditions, which may segfault.

Signed-off-by: Evan Wies <evan@neomantra.net>

Change summary

internal/ui/chat/user.go | 9 +++++++++
1 file changed, 9 insertions(+)

Detailed changes

internal/ui/chat/user.go 🔗

@@ -74,8 +74,12 @@ func (m *UserMessageItem) RawRender(width int) string {
 	}
 
 	renderer := common.MarkdownRenderer(m.sty, cappedWidth)
+	mu := common.LockMarkdownRenderer(renderer)
 
+	mu.Lock()
 	result, err := renderer.Render(msgContent)
+	mu.Unlock()
+
 	if err != nil {
 		content = msgContent
 	} else {
@@ -102,7 +106,12 @@ func (m *UserMessageItem) renderSkillInvocation(content string, width int) strin
 	if err := xml.Unmarshal([]byte(content), &skill); err != nil {
 		// If parsing fails, just render as markdown
 		renderer := common.MarkdownRenderer(m.sty, width)
+		mu := common.LockMarkdownRenderer(renderer)
+
+		mu.Lock()
 		result, err := renderer.Render(content)
+		mu.Unlock()
+
 		if err != nil {
 			return content
 		}