From 634caa3c9e1b1ba757c934f2218c52c5daf45a1c Mon Sep 17 00:00:00 2001 From: rephorm Date: Sat, 30 Oct 2004 02:30:55 +0000 Subject: [PATCH] ref and unref the edje when blocking/unblocking and creating/deleting messages to avoid accessing free'd memory if an edje is deleted from an edje signal callback. SVN revision: 12070 --- legacy/edje/src/lib/edje_message_queue.c | 2 ++ legacy/edje/src/lib/edje_util.c | 8 +++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/legacy/edje/src/lib/edje_message_queue.c b/legacy/edje/src/lib/edje_message_queue.c index 60a4f22d66..099c5a7a2b 100644 --- a/legacy/edje/src/lib/edje_message_queue.c +++ b/legacy/edje/src/lib/edje_message_queue.c @@ -127,6 +127,7 @@ _edje_message_new(Edje *ed, Edje_Queue queue, Edje_Message_Type type, int id) em->type = type; em->id = id; em->edje->message.num++; + _edje_ref(em->edje); return em; } @@ -242,6 +243,7 @@ _edje_message_free(Edje_Message *em) } } em->edje->message.num--; + _edje_unref(em->edje); free(em); } diff --git a/legacy/edje/src/lib/edje_util.c b/legacy/edje/src/lib/edje_util.c index dce13d3e26..a4d7471f29 100644 --- a/legacy/edje/src/lib/edje_util.c +++ b/legacy/edje/src/lib/edje_util.c @@ -1482,6 +1482,7 @@ _edje_thaw(Edje *ed) int _edje_block(Edje *ed) { + _edje_ref(ed); ed->block++; return ed->block; } @@ -1489,12 +1490,17 @@ _edje_block(Edje *ed) int _edje_unblock(Edje *ed) { + int ret = 0; + if (!ed) return; + ed->block--; if (ed->block == 0) { ed->block_break = 0; } - return ed->block; + ret = ed->block; + _edje_unref(ed); + return ret; } int