From 0b9391a7bdd41b4b4323e44a10f46b83366065b0 Mon Sep 17 00:00:00 2001 From: Abhishek Vijay Date: Mon, 28 Sep 2020 18:03:21 +0530 Subject: [Non-ACR] improve app-id string handling Change-Id: I904cdee0c31c00b938464e20ff596eb9a1055c9e Signed-off-by: Abhishek Vijay --- include/bm_listeners.h | 20 ++++- src/battery_dump/bm_listeners.c | 166 +++++++++++++++++++++++----------------- 2 files changed, 113 insertions(+), 73 deletions(-) diff --git a/include/bm_listeners.h b/include/bm_listeners.h index 95d4e21..25ecf64 100644 --- a/include/bm_listeners.h +++ b/include/bm_listeners.h @@ -23,9 +23,11 @@ #include #include #include +#include + +#include "bm_dbg.h" #include "bm_plugin_interface.h" #include "bd_private.h" -#include #define BATTERY_INFO_DELAY 1 #define MAX_BUFF 1 @@ -46,7 +48,21 @@ #define LISTEN_APP_STATUS 14 #define LISTEN_MODEM_POWER_STATE 15 - +/* validating input param & return error */ +#define BD_CHECK_FOR_VALIDITY(eval, expr, ret_val)\ + if (!(eval)) {\ + _ERR("invalid object");\ + expr;\ + return ret_val;\ + } else {} + +/* validating expression & return */ +#define BD_CHECK_VALIDITY_RETURN(eval, expr)\ + if (!(eval)) {\ + _ERR("invalid object");\ + expr;\ + return;\ + } else {} int bd_initialize_listeners(void); diff --git a/src/battery_dump/bm_listeners.c b/src/battery_dump/bm_listeners.c index 160b36b..5f4632d 100644 --- a/src/battery_dump/bm_listeners.c +++ b/src/battery_dump/bm_listeners.c @@ -55,6 +55,36 @@ static int buff_count = 0; GHashTable *app_list = NULL; static GHashTable *pid_map = NULL; +static void bd_set_free_data_object(void) +{ + BD_CHECK_VALIDITY_RETURN((data_obj != NULL), {}); + + history_item_s* obj = data_obj; + + /* event tag string */ + if (obj->event_tag != NULL) { + if (obj->event_tag->string_info != NULL) + g_string_free(obj->event_tag->string_info, TRUE); + free(obj->event_tag); + obj->event_tag = NULL; + } + /* wakelock tag string */ + if (obj->wakelock_tag != NULL) { + if (obj->wakelock_tag->string_info != NULL) + g_string_free(obj->wakelock_tag->string_info, TRUE); + free(obj->wakelock_tag); + obj->wakelock_tag = NULL; + } + /* wakereason tag string */ + if (obj->wakereason_tag != NULL) { + if (obj->wakereason_tag->string_info != NULL) + g_string_free(obj->wakereason_tag->string_info, TRUE); + free(obj->wakereason_tag); + obj->wakereason_tag = NULL; + } + return; +} + static void bd_get_app_id_from_table(gint pid, char **app_id) { if (pid_map == NULL) { @@ -126,13 +156,12 @@ static int bd_listener_set_appId_info(char *app_id) data_obj->event_tag->uid = 1000; - data_obj->event_tag->string_info = g_string_sized_new(7); - if (!data_obj->event_tag->string_info) { - _ERR("memory allocation failed "); - return 1; - } + data_obj->event_tag->string_info = g_string_new(app_id); - g_string_append_printf(data_obj->event_tag->string_info, "%s", app_id); + BD_CHECK_FOR_VALIDITY((data_obj->event_tag->string_info != NULL), {}, + BATTERY_MONITOR_ERROR_OUT_OF_MEMORY); + + _DBG("set string_info - [%s]", data_obj->event_tag->string_info->str); EXIT; return 0; @@ -641,19 +670,20 @@ static void bd_listener_set_sleep_wakeup_change_data(int val) data_obj->event_code = ET_NONE; data_obj->event_tag = NULL; data_obj->wakereason_tag = NULL; + data_obj->wakereason_tag = (history_tag_s *)calloc(1, sizeof(history_tag_s)); if (data_obj->wakereason_tag) { wakeup_hsp = ++listener_hsp; _DBG("Wakereason Tag creation succeeded \n"); data_obj->wakereason_tag->sp_idx = wakeup_hsp; data_obj->wakereason_tag->uid = 1000; - data_obj->wakereason_tag->string_info = g_string_sized_new(10); - if (data_obj->wakereason_tag->string_info == NULL) { - _ERR("data_obj->wakereason_tag->string_info creation failed"); - BM_FREE(data_obj->wakereason_tag); - return; - } - g_string_append_printf(data_obj->wakereason_tag->string_info, "%s", "Tizen"); + + data_obj->wakereason_tag->string_info = g_string_new("Tizen"); + BD_CHECK_VALIDITY_RETURN((data_obj->wakereason_tag->string_info != NULL), + BM_FREE(data_obj->wakereason_tag)); + + _DBG("wakelock reason tag, string_info - [%s]", + data_obj->wakereason_tag->string_info->str); } else { _ERR(" data_obj->wakereason_tag object creation fails "); return; @@ -663,18 +693,19 @@ static void bd_listener_set_sleep_wakeup_change_data(int val) data_obj->event_code = ET_NONE; data_obj->event_tag = NULL; data_obj->wakereason_tag = NULL; + data_obj->wakereason_tag = (history_tag_s *)calloc(1, sizeof(history_tag_s)); if (data_obj->wakereason_tag) { _DBG("Wakereason Tag creation succeeded \n"); data_obj->wakereason_tag->sp_idx = wakeup_hsp; data_obj->wakereason_tag->uid = 1000; - data_obj->wakereason_tag->string_info = g_string_sized_new(10); - if (data_obj->wakereason_tag->string_info == NULL) { - _ERR("data_obj->wakereason_tag->string_info creation failed"); - BM_FREE(data_obj->wakereason_tag); - return; - } - g_string_append_printf(data_obj->wakereason_tag->string_info, "%s", "Tizen"); + + data_obj->wakereason_tag->string_info = g_string_new("Tizen"); + BD_CHECK_VALIDITY_RETURN((data_obj->wakereason_tag->string_info != NULL), + BM_FREE(data_obj->wakereason_tag)); + + _DBG("wakelock reason tag, string_info - [%s]", + data_obj->wakereason_tag->string_info->str); } else { _ERR(" data_obj->wakereason_tag object creation fails "); return; @@ -731,49 +762,58 @@ static void bd_listener_set_location_change_data(int gps) return; } -static int bd_listener_set_power_lock_unlock_change_data(int lock) +static int bd_listener_set_power_lock_unlock_change_data(int lock, char *app_id) { ENTER; - _INFO("lock change = %d", lock); + BD_CHECK_FOR_VALIDITY((app_id != NULL), {}, BATTERY_MONITOR_ERROR_INVALID_PARAMETER); + BD_CHECK_FOR_VALIDITY((data_obj != NULL), BM_FREE(app_id), BATTERY_MONITOR_ERROR_NULL_POINTER); + + _INFO("lock change - %d, app - %s", lock, app_id); static int prev_wakeup = 0; + static int lock_hsp = 0; - if (prev_wakeup == lock) + if (prev_wakeup == lock) { + _DBG("prev & current wakeups are same"); + BM_FREE(app_id); return 1; - else + } else { prev_wakeup = lock; + } + if (lock) { + data_obj->event_code = ET_NONE; + data_obj->event_tag = NULL; + data_obj->wakelock_tag = NULL; - static int lock_hsp = 0; + data_obj->wakelock_tag = (history_tag_s *)calloc(1, sizeof(history_tag_s)); + if (data_obj->wakelock_tag) { - if (data_obj) { - if (lock) { - data_obj->event_code = ET_NONE; - data_obj->wakelock_tag = NULL; - data_obj->event_tag = NULL; - data_obj->wakelock_tag = (history_tag_s *)calloc(1, sizeof(history_tag_s)); - if (data_obj->wakelock_tag) { - lock_hsp = ++listener_hsp; - _DBG("wakelock Tag creation succeeded \n"); - data_obj->wakelock_tag->sp_idx = lock_hsp; - data_obj->wakelock_tag->uid = 1000; - data_obj->wakelock_tag->string_info = g_string_sized_new(10); - BM_CHECK_MEM_ALLOC(data_obj->wakelock_tag->string_info, {BM_FREE(data_obj->wakelock_tag); }); - g_string_append_printf(data_obj->wakelock_tag->string_info, "%s", "Tizen"); - //WRITE THE WL TAG - } else { - _ERR(" data_obj->wakelock_tag object creation fails "); - return 1; - } - data_obj->state_1 |= ST1_WAKE_LOCK_FLAG; + lock_hsp = ++listener_hsp; + data_obj->wakelock_tag->sp_idx = lock_hsp; + data_obj->wakelock_tag->uid = 1000; + + data_obj->wakelock_tag->string_info = g_string_new(app_id); + BD_CHECK_FOR_VALIDITY((data_obj->wakelock_tag->string_info != NULL), {}, + BATTERY_MONITOR_ERROR_OUT_OF_MEMORY); + + _DBG("wakelock tag created, string_info - [%s]", + data_obj->wakelock_tag->string_info->str); + + BM_FREE(app_id); } else { - data_obj->event_code = ET_NONE; - data_obj->wakelock_tag = NULL; - data_obj->event_tag = NULL; - //WAKE LOCK TAG INFORMATION NOT REQ. AT UNSET. - data_obj->state_1 &= ~(ST1_WAKE_LOCK_FLAG); + _ERR(" object creation failure "); + BM_FREE(app_id); + return 1; } + data_obj->state_1 |= ST1_WAKE_LOCK_FLAG; + } else { + data_obj->event_code = ET_NONE; + data_obj->wakelock_tag = NULL; + data_obj->event_tag = NULL; + //WAKE LOCK TAG INFORMATION NOT REQ. AT UNSET. + data_obj->state_1 &= ~(ST1_WAKE_LOCK_FLAG); } EXIT; @@ -1009,7 +1049,7 @@ static void bd_listener_create_event_data(int type, int val, char *app) bd_listener_set_signal_strength_change_data(val); break; case LISTEN_POWERLOCKUNLOCK_STATE: - if (bd_listener_set_power_lock_unlock_change_data(val) == BATTERY_MONITOR_ERROR_NONE) + if (bd_listener_set_power_lock_unlock_change_data(val, app) == BATTERY_MONITOR_ERROR_NONE) break; else return; @@ -1057,13 +1097,9 @@ static void bd_listener_create_event_data(int type, int val, char *app) if (data_obj->event_tag && type != LISTEN_APP_STATUS) { data_obj->event_tag->uid = 1000; - data_obj->event_tag->string_info = g_string_sized_new(7); - if (!data_obj->event_tag->string_info) { - _ERR("memory allocation failed "); - return; - } - g_string_append_printf(data_obj->event_tag->string_info, "%s", "Tizen"); + data_obj->event_tag->string_info = g_string_new("Tizen"); + BD_CHECK_VALIDITY_RETURN((data_obj->event_tag->string_info != NULL), {}); } if (data_obj->event_tag) { @@ -1082,6 +1118,7 @@ static void bd_listener_create_event_data(int type, int val, char *app) if (bd_store_history_item(data_obj) != BATTERY_MONITOR_ERROR_NONE) { _ERR("Failed to store history items "); + bd_set_free_data_object(); return; } @@ -2419,20 +2456,7 @@ int bd_deinitialize_listeners() pid_map = NULL; } - if (data_obj != NULL && data_obj->event_tag != NULL) { - BM_FREE(data_obj->event_tag->string_info); - BM_FREE(data_obj->event_tag); - } - - if (data_obj != NULL && data_obj->wakelock_tag != NULL) { - BM_FREE(data_obj->wakelock_tag->string_info); - BM_FREE(data_obj->wakelock_tag); - } - - if (data_obj != NULL && data_obj->wakereason_tag != NULL) { - BM_FREE(data_obj->wakereason_tag->string_info); - BM_FREE(data_obj->wakereason_tag); - } + bd_set_free_data_object(); BM_FREE(data_obj); -- cgit v1.2.3