Free all static memory upon exit
diff --git a/src/hb-common.cc b/src/hb-common.cc
index f2347d5..afbe941 100644
--- a/src/hb-common.cc
+++ b/src/hb-common.cc
@@ -161,8 +161,10 @@
void finish (void) { free (lang); }
};
-static hb_static_mutex_t langs_lock;
-static hb_lockable_set_t<hb_language_item_t, hb_static_mutex_t> langs;
+static struct hb_static_lang_set_t : hb_lockable_set_t<hb_language_item_t, hb_static_mutex_t> {
+ ~hb_static_lang_set_t (void) { this->finish (lock); }
+ hb_static_mutex_t lock;
+} langs;
hb_language_t
hb_language_from_string (const char *str)
@@ -170,7 +172,7 @@
if (!str || !*str)
return HB_LANGUAGE_INVALID;
- hb_language_item_t *item = langs.find_or_insert (str, langs_lock);
+ hb_language_item_t *item = langs.find_or_insert (str, langs.lock);
return likely (item) ? item->lang : HB_LANGUAGE_INVALID;
}
diff --git a/src/hb-shape.cc b/src/hb-shape.cc
index 986dd70..9e4469d 100644
--- a/src/hb-shape.cc
+++ b/src/hb-shape.cc
@@ -60,8 +60,8 @@
};
#undef HB_SHAPER_IMPLEMENT
-static class static_shaper_list_t {
- public:
+static struct static_shaper_list_t
+{
static_shaper_list_t (void)
{
char *env = getenv ("HB_SHAPER_LIST");