From fb97c82882a46225886204109880cac4f8704340 Mon Sep 17 00:00:00 2001 From: Paulo Alcantara Date: Fri, 21 Dec 2012 21:11:23 +0000 Subject: [PATCH] efl/cserve2: Fix some bugs regarding fonts Signed-off-by: Paulo Alcantara SVN revision: 81582 --- src/bin/evas/evas_cserve2_cache.c | 8 ++++---- src/lib/evas/cserve2/evas_cs2_client.c | 20 ++++++++++++++++++-- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/bin/evas/evas_cserve2_cache.c b/src/bin/evas/evas_cserve2_cache.c index a969b94f18..2264d09f23 100644 --- a/src/bin/evas/evas_cserve2_cache.c +++ b/src/bin/evas/evas_cserve2_cache.c @@ -991,10 +991,10 @@ _entry_free_cb(void *data) static void _font_entry_reference_del(Client *client, Font_Entry *fe) { - Eina_List *l; + Eina_List *l, *l_next; Reference *ref; - EINA_LIST_FOREACH(client->fonts.referencing, l, ref) + EINA_LIST_FOREACH_SAFE(client->fonts.referencing, l, l_next, ref) { if (ref->entry == (Entry *)fe) { @@ -1203,12 +1203,12 @@ _font_load_request_response(Font_Entry *fe, Slave_Msg_Font_Loaded *msg, int *siz static void _font_load_request_failed(Font_Entry *fe, Error_Type error EINA_UNUSED) { - Eina_List *l; + Eina_List *l, *l_next; Reference *ref; if (fe->base.request) fe->base.request = NULL; - EINA_LIST_FOREACH(fe->base.references, l, ref) + EINA_LIST_FOREACH_SAFE(fe->base.references, l, l_next, ref) _font_entry_reference_del(ref->client, fe); } diff --git a/src/lib/evas/cserve2/evas_cs2_client.c b/src/lib/evas/cserve2/evas_cs2_client.c index 34879bbdd1..7748aca5f1 100644 --- a/src/lib/evas/cserve2/evas_cs2_client.c +++ b/src/lib/evas/cserve2/evas_cs2_client.c @@ -993,13 +993,29 @@ evas_cserve2_font_load(const char *source, const char *name, int size, int dpi, return fe; } +static inline int +_font_load_wait(Font_Entry *fe) +{ + _server_dispatch_until(fe->rid); + + if (fe->failed) return CSERVE2_GENERIC; + + return CSERVE2_NONE; +} + void evas_cserve2_font_free(Font_Entry *fe) { + int ret; + if (!fe) return; - if (fe->failed) - return; + ret = _font_load_wait(fe); + if (ret == CSERVE2_GENERIC) + { + ERR("Failed to wait loading font '%s'.", fe->name); + return; + } _font_load_server_send(fe, CSERVE2_FONT_UNLOAD);