From 6b60d6d1eee9deab6720c2da305863ac63d43de4 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Wed, 31 Mar 2010 10:02:51 +0000 Subject: [PATCH] avoid errors - calling more lua calls afre the pcall failed... bad! SVN revision: 47619 --- legacy/edje/src/lib/edje_lua.c | 66 +++++++++++++++------- legacy/edje/src/lib/edje_lua_script_only.c | 28 ++++----- legacy/edje/src/lib/edje_private.h | 5 ++ 3 files changed, 66 insertions(+), 33 deletions(-) diff --git a/legacy/edje/src/lib/edje_lua.c b/legacy/edje/src/lib/edje_lua.c index 652748c166..63150245de 100644 --- a/legacy/edje/src/lib/edje_lua.c +++ b/legacy/edje/src/lib/edje_lua.c @@ -228,6 +228,16 @@ struct _Edje_Lua_Edje_Part_Description Edje_Part_Description *pd; }; +jmp_buf _edje_lua_panic_jmp; + +static int +_edje_lua_custom_panic(lua_State *L) +{ + printf("PANIC\n"); + longjmp(_edje_lua_panic_jmp, 1); + return 1; /* longjmp() never returns, but this keep gcc happy */ +} + void __edje_lua_error(const char *file, const char *fnc, int line, lua_State *L, int err_code) { @@ -831,10 +841,20 @@ _edje_lua_timer_cb(void *data) _edje_lua_get_reg(L, obj); if ((err_code = lua_pcall(L, 1, 1, 0))) - _edje_lua_error(L, err_code); + { + _edje_lua_error(L, err_code); + return 0; + } res = luaL_checkint(L, -1); lua_pop(L, 1); // -- res + +/* + if (_edje_lua_panic_here()) + printf("blahc\n"); + else + lua_pop(L, 1); // -- res + */ if (res == ECORE_CALLBACK_CANCEL) { // delete object @@ -843,8 +863,8 @@ _edje_lua_timer_cb(void *data) lua_pushstring(L, "del"); lua_gettable(L, -2); lua_insert(L, -2); - if ((err_code = lua_pcall(L, 1, 0, 0))) - _edje_lua_error(L, err_code); + if ((err_code = lua_pcall(L, 1, 0, 0))) + _edje_lua_error(L, err_code); } return res; } @@ -1016,7 +1036,10 @@ _edje_lua_animator_cb(void *data) _edje_lua_get_reg(L, obj); if ((err = lua_pcall(L, 1, 1, 0))) - _edje_lua_error(L, err); + { + _edje_lua_error(L, err); + return 0; + } res = luaL_checkint(L, -1); lua_pop(L, 1); // Pop res off the stack @@ -1028,8 +1051,8 @@ _edje_lua_animator_cb(void *data) lua_pushstring(L, "del"); lua_gettable(L, -2); lua_insert(L, -2); - if ((err = lua_pcall(L, 1, 0, 0))) - _edje_lua_error(L, err); + if ((err = lua_pcall(L, 1, 0, 0))) + _edje_lua_error(L, err); } return res; @@ -1121,7 +1144,10 @@ _edje_lua_poller_cb(void *data) _edje_lua_get_reg(L, obj); if ((err = lua_pcall(L, 1, 1, 0))) - _edje_lua_error(L, err); + { + _edje_lua_error(L, err); + return 0; + } res = luaL_checkint(L, -1); lua_pop(L, 1); // Pop res off the stack @@ -1133,8 +1159,8 @@ _edje_lua_poller_cb(void *data) lua_pushstring(L, "del"); lua_gettable(L, -2); lua_insert(L, -2); - if ((err = lua_pcall(L, 1, 0, 0))) - _edje_lua_error(L, err); + if ((err = lua_pcall(L, 1, 0, 0))) + _edje_lua_error(L, err); } return res; @@ -2175,7 +2201,7 @@ _edje_lua_object_cb_mouse_in(void *data, Evas * e, Evas_Object * obj, lua_pushnumber(L, ev->canvas.y); if ((err_code = lua_pcall(L, 5, 0, 0))) - _edje_lua_error(L, err_code); + _edje_lua_error(L, err_code); } static void @@ -2192,7 +2218,7 @@ _edje_lua_object_cb_mouse_out(void *data, Evas * e, Evas_Object * obj, lua_pushnumber(L, ev->canvas.y); if ((err_code = lua_pcall(L, 5, 0, 0))) - _edje_lua_error(L, err_code); + _edje_lua_error(L, err_code); } static void @@ -2210,7 +2236,7 @@ _edje_lua_object_cb_mouse_down(void *data, Evas * e, Evas_Object * obj, lua_pushnumber(L, ev->canvas.y); if ((err_code = lua_pcall(L, 6, 0, 0))) - _edje_lua_error(L, err_code); + _edje_lua_error(L, err_code); } static void @@ -2228,7 +2254,7 @@ _edje_lua_object_cb_mouse_up(void *data, Evas * e, Evas_Object * obj, lua_pushnumber(L, ev->canvas.y); if ((err_code = lua_pcall(L, 6, 0, 0))) - _edje_lua_error(L, err_code); + _edje_lua_error(L, err_code); } static void @@ -2246,7 +2272,7 @@ _edje_lua_object_cb_mouse_move(void *data, Evas * e, Evas_Object * obj, lua_pushnumber(L, ev->cur.canvas.y); if ((err_code = lua_pcall(L, 6, 0, 0))) - _edje_lua_error(L, err_code); + _edje_lua_error(L, err_code); } static void @@ -2264,7 +2290,7 @@ _edje_lua_object_cb_mouse_wheel(void *data, Evas * e, Evas_Object * obj, lua_pushnumber(L, ev->canvas.y); if ((err_code = lua_pcall(L, 6, 0, 0))) - _edje_lua_error(L, err_code); + _edje_lua_error(L, err_code); } static int @@ -5195,8 +5221,8 @@ _edje_lua_group_signal_callback(void *data, Evas_Object * edj, lua_pushstring(L, signal); // signal lua_pushstring(L, source); // source - if ((err_code = lua_pcall(L, 3, 0, 0))) - _edje_lua_error(L, err_code); + if ((err_code = lua_pcall(L, 3, 0, 0))) + _edje_lua_error(L, err_code); } } @@ -5330,8 +5356,8 @@ const Edje_Lua_Reg *cScript[] = { lua_getfield (L, -1, "set"); \ lua_pushvalue (L, -2); \ lua_pushvalue (L, 2); \ - if ((err_code = lua_pcall (L, 2, 0, 0))) \ - _edje_lua_error (L, err_code); \ + if ((err_code = lua_pcall (L, 2, 0, 0))) \ + _edje_lua_error (L, err_code); \ } \ return 1; \ } @@ -5556,6 +5582,8 @@ _edje_lua_init() exit(-1); } + lua_atpanic(Ledje, _edje_lua_custom_panic); + /* * configure Lua garbage collector * TODO optimize garbage collector for typical edje use or make it configurable diff --git a/legacy/edje/src/lib/edje_lua_script_only.c b/legacy/edje/src/lib/edje_lua_script_only.c index 01ad63c704..8ba7b49371 100644 --- a/legacy/edje/src/lib/edje_lua_script_only.c +++ b/legacy/edje/src/lib/edje_lua_script_only.c @@ -56,8 +56,8 @@ _edje_lua_script_only_init(Edje * ed) lua_setfenv(L, -2); _edje_lua_get_reg(L, ed); - if ((err_code = lua_pcall(L, 1, 0, 0))) - _edje_lua_error(L, err_code); + if ((err_code = lua_pcall(L, 1, 0, 0))) + _edje_lua_error(L, err_code); } else lua_pop(L, 1); @@ -79,8 +79,8 @@ _edje_lua_script_only_shutdown(Edje * ed) lua_setfenv(L, -2); _edje_lua_get_reg(L, ed); - if ((err_code = lua_pcall(L, 1, 0, 0))) - _edje_lua_error(L, err_code); + if ((err_code = lua_pcall(L, 1, 0, 0))) + _edje_lua_error(L, err_code); } else lua_pop (L, 1); @@ -102,8 +102,8 @@ _edje_lua_script_only_show(Edje * ed) lua_setfenv(L, -2); _edje_lua_get_reg(L, ed); - if ((err_code = lua_pcall(L, 1, 0, 0))) - _edje_lua_error(L, err_code); + if ((err_code = lua_pcall(L, 1, 0, 0))) + _edje_lua_error(L, err_code); } else lua_pop (L, 1); @@ -125,8 +125,8 @@ _edje_lua_script_only_hide(Edje * ed) lua_setfenv(L, -2); _edje_lua_get_reg(L, ed); - if ((err_code = lua_pcall(L, 1, 0, 0))) - _edje_lua_error(L, err_code); + if ((err_code = lua_pcall(L, 1, 0, 0))) + _edje_lua_error(L, err_code); } else lua_pop (L, 1); @@ -150,8 +150,8 @@ _edje_lua_script_only_move(Edje * ed) lua_pushnumber(L, ed->x); lua_pushnumber(L, ed->y); - if ((err_code = lua_pcall(L, 3, 0, 0))) - _edje_lua_error(L, err_code); + if ((err_code = lua_pcall(L, 3, 0, 0))) + _edje_lua_error(L, err_code); } else lua_pop (L, 1); @@ -175,8 +175,8 @@ _edje_lua_script_only_resize(Edje * ed) lua_pushnumber(L, ed->w); lua_pushnumber(L, ed->h); - if ((err_code = lua_pcall(L, 3, 0, 0))) - _edje_lua_error(L, err_code); + if ((err_code = lua_pcall(L, 3, 0, 0))) + _edje_lua_error(L, err_code); } else lua_pop (L, 1); @@ -286,8 +286,8 @@ _edje_lua_script_only_message(Edje * ed, Edje_Message * em) break; } - if ((err_code = lua_pcall(L, nargs, 0, 0))) - _edje_lua_error(L, err_code); + if ((err_code = lua_pcall(L, nargs, 0, 0))) + _edje_lua_error(L, err_code); } else lua_pop (L, 1); diff --git a/legacy/edje/src/lib/edje_private.h b/legacy/edje/src/lib/edje_private.h index ec092d1eee..e99b8ab534 100644 --- a/legacy/edje/src/lib/edje_private.h +++ b/legacy/edje/src/lib/edje_private.h @@ -24,6 +24,8 @@ #include #include +#include + EAPI extern int _edje_default_log_dom ; #ifdef EDJE_DEFAULT_LOG_COLOR @@ -1473,6 +1475,9 @@ void _edje_script_only_move(Edje *ed); void _edje_script_only_resize(Edje *ed); void _edje_script_only_message(Edje *ed, Edje_Message *em); +extern jmp_buf _edje_lua_panic_jmp; +#define _edje_lua_panic_here() setjmp(_edje_lua_panic_jmp) + lua_State *_edje_lua_state_get(); lua_State *_edje_lua_new_thread(lua_State *L); void _edje_lua_free_thread(lua_State *L);