From 67d609e5e49cec6f5d2c06ae4af9998ced1df02a Mon Sep 17 00:00:00 2001 From: nibbbl <63519528+nibbbl@users.noreply.github.com> Date: Tue, 14 Jul 2026 12:28:30 -0700 Subject: Address review: cache FcInit, null-check FontConfig allocs, drop unused include --- indra/llwindow/llwindowsdl.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp index b6b477ff68..e3ae9493a6 100644 --- a/indra/llwindow/llwindowsdl.cpp +++ b/indra/llwindow/llwindowsdl.cpp @@ -45,8 +45,6 @@ #include #endif -#include - extern "C" { # include "fontconfig/fontconfig.h" } @@ -1889,7 +1887,10 @@ LLFontFallbackMatch LLWindowSDL::findFallbackFontForChar(llwchar wch) { LLFontFallbackMatch result; #if LL_LINUX - if (!FcInit()) + // FcInit() is idempotent, but this runs per missing codepoint, so only + // attempt initialization once. + static bool fc_ready = FcInit(); + if (!fc_ready) { LL_WARNS_ONCE() << "FontConfig failed to initialize." << LL_ENDL; return result; @@ -1897,9 +1898,16 @@ LLFontFallbackMatch LLWindowSDL::findFallbackFontForChar(llwchar wch) // Ask FontConfig for the best font covering this codepoint. FcCharSet* charset = FcCharSetCreate(); + FcPattern* pat = FcPatternCreate(); + if (!charset || !pat) + { + if (charset) FcCharSetDestroy(charset); + if (pat) FcPatternDestroy(pat); + return result; + } + FcCharSetAddChar(charset, (FcChar32)wch); - FcPattern* pat = FcPatternCreate(); FcPatternAddCharSet(pat, FC_CHARSET, charset); FcPatternAddBool(pat, FC_SCALABLE, FcTrue); -- cgit v1.3