From 5aa5fbec06d3c1c147d0007ec4bb3262c1849945 Mon Sep 17 00:00:00 2001 From: Daniel Willmann Date: Mon, 10 Jun 2013 16:41:30 +0100 Subject: [PATCH] ecore_init/shutdown: Proper refcounting for wrappers Signed-off-by: Daniel Willmann --- src/lib/tsuite_evas_hook.c | 39 ++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/src/lib/tsuite_evas_hook.c b/src/lib/tsuite_evas_hook.c index a04ca26..5383fc8 100644 --- a/src/lib/tsuite_evas_hook.c +++ b/src/lib/tsuite_evas_hook.c @@ -219,10 +219,12 @@ tsuite_shot_do(char *name, Evas *e) EAPI int ecore_init(void) { + int ret; int (*_ecore_init)(void) = dlsym(RTLD_NEXT, "ecore_init"); - if (!_hook_setting) + ret = _ecore_init(); + if ((ret == 1) && (!_hook_setting)) { const char *tmp; _hook_setting = calloc(1, sizeof(evas_hook_setting)); @@ -243,33 +245,38 @@ ecore_init(void) tsuite_evas_hook_init(); } - return _ecore_init(); + return ret; } EAPI int ecore_shutdown(void) { + int ret; int (*_ecore_shutdown)(void) = dlsym(RTLD_NEXT, "ecore_shutdown"); - if (_hook_setting) + ret = _ecore_shutdown(); + if (ret == 0) { - if (vr_list && _hook_setting->recording) - write_events(_hook_setting->file_name, vr_list); + if (_hook_setting) + { + if (vr_list && _hook_setting->recording) + write_events(_hook_setting->file_name, vr_list); - tsuite_evas_hook_reset(); + tsuite_evas_hook_reset(); - free(_hook_setting); - _hook_setting = NULL; + free(_hook_setting); + _hook_setting = NULL; + } + + if (ts.td) + free(ts.td); + + evas_list = eina_list_free(evas_list); + + memset(&ts, 0, sizeof(Tsuite_Data)); } - - if (ts.td) - free(ts.td); - - evas_list = eina_list_free(evas_list); - - memset(&ts, 0, sizeof(Tsuite_Data)); - return _ecore_shutdown(); + return ret; } EAPI Evas_Object *