From 4e264bd45d6cd7fa7d0d1e93a4aeef55a9cc2371 Mon Sep 17 00:00:00 2001 From: Matt Date: Sun, 31 Mar 2019 16:52:16 +0200 Subject: [PATCH] Use mutex to protect scrolling banner cache from data race --- src/openrct2/drawing/ScrollingText.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/openrct2/drawing/ScrollingText.cpp b/src/openrct2/drawing/ScrollingText.cpp index 0d35edea29..a054247a43 100644 --- a/src/openrct2/drawing/ScrollingText.cpp +++ b/src/openrct2/drawing/ScrollingText.cpp @@ -17,6 +17,7 @@ #include "TTF.h" #include +#include #pragma pack(push, 1) /* size: 0xA12 */ @@ -38,6 +39,7 @@ assert_struct_size(rct_draw_scroll_text, 0xA12); static rct_draw_scroll_text _drawScrollTextList[MAX_SCROLLING_TEXT_ENTRIES]; static uint8_t _characterBitmaps[FONT_SPRITE_GLYPH_COUNT + SPR_G2_GLYPH_COUNT][8]; static uint32_t _drawSCrollNextIndex = 0; +static std::mutex _scrollingTextMutex; static void scrolling_text_set_bitmap_for_sprite( utf8* text, int32_t scroll, uint8_t* bitmap, const int16_t* scrollPositionOffsets); @@ -1472,6 +1474,8 @@ void scrolling_text_invalidate() */ int32_t scrolling_text_setup(paint_session* session, rct_string_id stringId, uint16_t scroll, uint16_t scrollingMode) { + std::scoped_lock lock(_scrollingTextMutex); + assert(scrollingMode < MAX_SCROLLING_TEXT_MODES); rct_drawpixelinfo* dpi = &session->DPI;