From 3a9e26b26cc5e6d06d454f4f876caea23cbe7ede Mon Sep 17 00:00:00 2001 From: reuk Date: Thu, 11 Jun 2020 11:32:10 +0100 Subject: [PATCH] Font: Fix deadlock in findTypefaceFor --- modules/juce_graphics/fonts/juce_Font.cpp | 26 ++++++++++++----------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/modules/juce_graphics/fonts/juce_Font.cpp b/modules/juce_graphics/fonts/juce_Font.cpp index d95708e490..84997edb31 100644 --- a/modules/juce_graphics/fonts/juce_Font.cpp +++ b/modules/juce_graphics/fonts/juce_Font.cpp @@ -72,24 +72,26 @@ public: Typeface::Ptr findTypefaceFor (const Font& font) { - const ScopedReadLock slr (lock); - - auto faceName = font.getTypefaceName(); - auto faceStyle = font.getTypefaceStyle(); + const auto faceName = font.getTypefaceName(); + const auto faceStyle = font.getTypefaceStyle(); jassert (faceName.isNotEmpty()); - for (int i = faces.size(); --i >= 0;) { - CachedFace& face = faces.getReference(i); + const ScopedReadLock slr (lock); - if (face.typefaceName == faceName - && face.typefaceStyle == faceStyle - && face.typeface != nullptr - && face.typeface->isSuitableForFont (font)) + for (int i = faces.size(); --i >= 0;) { - face.lastUsageCount = ++counter; - return face.typeface; + CachedFace& face = faces.getReference(i); + + if (face.typefaceName == faceName + && face.typefaceStyle == faceStyle + && face.typeface != nullptr + && face.typeface->isSuitableForFont (font)) + { + face.lastUsageCount = ++counter; + return face.typeface; + } } }