提交 5aa2c6e1 编写于 作者: B Behdad Esfahbod

[atexit] Make hb_languate_item_t *langs freeing threadsafe

Part of https://github.com/harfbuzz/harfbuzz/issues/923
上级 8c945110
......@@ -252,11 +252,16 @@ static hb_language_item_t *langs;
static void
free_langs (void)
{
while (langs) {
hb_language_item_t *next = langs->next;
langs->finish ();
free (langs);
langs = next;
retry:
hb_language_item_t *first_lang = (hb_language_item_t *) hb_atomic_ptr_get (&langs);
if (!hb_atomic_ptr_cmpexch (&langs, first_lang, nullptr))
goto retry;
while (first_lang) {
hb_language_item_t *next = first_lang->next;
first_lang->finish ();
free (first_lang);
first_lang = next;
}
}
#endif
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册