From ca649bd6080ddd7ea6167a55db87ec2f4aa5ae79 Mon Sep 17 00:00:00 2001 From: Linh Vo Date: Sun, 15 Feb 2026 11:05:01 +0700 Subject: [PATCH 1/2] fix: fix crash due data race on globalMarkdownWorkletRuntime --- cpp/MarkdownGlobal.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cpp/MarkdownGlobal.cpp b/cpp/MarkdownGlobal.cpp index 67f93eb4..a275b297 100644 --- a/cpp/MarkdownGlobal.cpp +++ b/cpp/MarkdownGlobal.cpp @@ -8,12 +8,15 @@ namespace expensify { namespace livemarkdown { std::shared_ptr globalMarkdownWorkletRuntime; +std::mutex globalMarkdownRuntimeMutex; void setMarkdownRuntime(const std::shared_ptr &markdownWorkletRuntime) { + std::lock_guard lock(globalMarkdownRuntimeMutex); globalMarkdownWorkletRuntime = markdownWorkletRuntime; } std::shared_ptr getMarkdownRuntime() { + std::lock_guard lock(globalMarkdownRuntimeMutex); return globalMarkdownWorkletRuntime; } From 19ad58c01e0e22b36c4d889a44a47fc4431303c8 Mon Sep 17 00:00:00 2001 From: Linh Vo Date: Sun, 15 Feb 2026 16:17:01 +0700 Subject: [PATCH 2/2] chore: add assert for debug --- cpp/MarkdownGlobal.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cpp/MarkdownGlobal.cpp b/cpp/MarkdownGlobal.cpp index a275b297..a68e305c 100644 --- a/cpp/MarkdownGlobal.cpp +++ b/cpp/MarkdownGlobal.cpp @@ -1,5 +1,6 @@ #include "MarkdownGlobal.h" +#include #include using namespace facebook; @@ -17,6 +18,7 @@ void setMarkdownRuntime(const std::shared_ptr &markdownWorkletRu std::shared_ptr getMarkdownRuntime() { std::lock_guard lock(globalMarkdownRuntimeMutex); + react_native_assert(globalMarkdownWorkletRuntime != nullptr && "Markdown worklet runtime is not initialized yet"); return globalMarkdownWorkletRuntime; }