From 7d82bed4f4cac8f5227d935c0496290e24eb48c8 Mon Sep 17 00:00:00 2001 From: Ibrahn Sahir Date: Sat, 20 Oct 2018 10:13:06 +0100 Subject: [PATCH] Moved dynamic font list from static to lifetime controlled by main. Means the list is destroyed before the OS object, allowing it the opportunity to print an error if there are still dynamic font objects hanging around. --- scene/resources/dynamic_font.cpp | 20 +++++++++++--------- scene/resources/dynamic_font.h | 2 +- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/scene/resources/dynamic_font.cpp b/scene/resources/dynamic_font.cpp index 458cbf67183..7422c56eeeb 100644 --- a/scene/resources/dynamic_font.cpp +++ b/scene/resources/dynamic_font.cpp @@ -1029,7 +1029,7 @@ void DynamicFont::_bind_methods() { Mutex *DynamicFont::dynamic_font_mutex = NULL; -SelfList::List DynamicFont::dynamic_fonts; +SelfList::List *DynamicFont::dynamic_fonts = NULL; DynamicFont::DynamicFont() : font_list(this) { @@ -1041,29 +1041,31 @@ DynamicFont::DynamicFont() : spacing_char = 0; spacing_space = 0; outline_color = Color(1, 1, 1); - if (dynamic_font_mutex) + if (dynamic_font_mutex) { dynamic_font_mutex->lock(); - dynamic_fonts.add(&font_list); - if (dynamic_font_mutex) + dynamic_fonts->add(&font_list); dynamic_font_mutex->unlock(); + } } DynamicFont::~DynamicFont() { - - if (dynamic_font_mutex) + if (dynamic_font_mutex) { dynamic_font_mutex->lock(); - dynamic_fonts.remove(&font_list); - if (dynamic_font_mutex) + dynamic_fonts->remove(&font_list); dynamic_font_mutex->unlock(); + } } void DynamicFont::initialize_dynamic_fonts() { + dynamic_fonts = memnew(SelfList::List()); dynamic_font_mutex = Mutex::create(); } void DynamicFont::finish_dynamic_fonts() { memdelete(dynamic_font_mutex); dynamic_font_mutex = NULL; + memdelete(dynamic_fonts); + dynamic_fonts = NULL; } void DynamicFont::update_oversampling() { @@ -1073,7 +1075,7 @@ void DynamicFont::update_oversampling() { if (dynamic_font_mutex) dynamic_font_mutex->lock(); - SelfList *E = dynamic_fonts.first(); + SelfList *E = dynamic_fonts->first(); while (E) { if (E->self()->data_at_size.is_valid()) { diff --git a/scene/resources/dynamic_font.h b/scene/resources/dynamic_font.h index afda48a566f..bd3f84d62cf 100644 --- a/scene/resources/dynamic_font.h +++ b/scene/resources/dynamic_font.h @@ -285,7 +285,7 @@ public: SelfList font_list; static Mutex *dynamic_font_mutex; - static SelfList::List dynamic_fonts; + static SelfList::List *dynamic_fonts; static void initialize_dynamic_fonts(); static void finish_dynamic_fonts();