From 8f61823f67c061a241d583cb8ccf5af164d936d4 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Wed, 9 May 2012 07:30:59 +0000 Subject: [PATCH] edje: check that the file on disk didn't change when we try to reopen it. SVN revision: 70883 --- legacy/edje/ChangeLog | 2 ++ legacy/edje/NEWS | 1 + legacy/edje/src/lib/edje_load.c | 13 +++++++++++-- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/legacy/edje/ChangeLog b/legacy/edje/ChangeLog index aa22a7d70b..2fa15b5882 100644 --- a/legacy/edje/ChangeLog +++ b/legacy/edje/ChangeLog @@ -431,3 +431,5 @@ 2012-05-09 Cedric Bail * Fix bug in case of nesting edje_object_signal_emit and edje_object_signal_callback_{add,del} + * Check that the file changed on disk when trying to reopen it. + diff --git a/legacy/edje/NEWS b/legacy/edje/NEWS index c9bc3e97b7..2ca5c75546 100644 --- a/legacy/edje/NEWS +++ b/legacy/edje/NEWS @@ -12,6 +12,7 @@ Improvements: Fixes: * Add missing files in the tarballs. * Prevent crash when running nested edje_object_signal_emit with edje_object_signal_callback_{add,del}. + * Do actually verify that the file on disk is different from the file we have loaded. Edje 1.2.0 diff --git a/legacy/edje/src/lib/edje_load.c b/legacy/edje/src/lib/edje_load.c index fc2aea3920..8cb823c8b3 100644 --- a/legacy/edje/src/lib/edje_load.c +++ b/legacy/edje/src/lib/edje_load.c @@ -290,8 +290,16 @@ _edje_object_file_set_internal(Evas_Object *obj, const char *file, const char *g if (!file) file = ""; if (!group) group = ""; if (((ed->path) && (!strcmp(file, ed->path))) && - (ed->group) && (!strcmp(group, ed->group))) - return 1; + (ed->group) && (!strcmp(group, ed->group)) && + ed->file) + { + struct stat st; + + if (stat(file, &st) != 0) + return 1; + if (st.st_mtime == ed->file->mtime) + return 1; + } tev = evas_object_evas_get(obj); evas_event_freeze(tev); @@ -299,6 +307,7 @@ _edje_object_file_set_internal(Evas_Object *obj, const char *file, const char *g if (_edje_script_only(ed)) _edje_script_only_shutdown(ed); if (_edje_lua_script_only(ed)) _edje_lua_script_only_shutdown(ed); + _edje_file_del(ed); eina_stringshare_replace(&ed->path, file);