diff options
author | Inkyun Kil <inkyun.kil@samsung.com> | 2017-06-02 17:36:43 +0900 |
---|---|---|
committer | Jiwoong Im <jiwoong.im@samsung.com> | 2017-07-06 18:59:55 +0900 |
commit | 5969a4347544623bf0d4ccd1aca64863d7b72eca (patch) | |
tree | 16fb2dd1bba9cf2b9b2c18983fc2185d38e16dc4 | |
parent | 8572900aa8c8038538efbf924203f352c3ca9e7b (diff) | |
download | alarm-manager-5969a4347544623bf0d4ccd1aca64863d7b72eca.tar.gz alarm-manager-5969a4347544623bf0d4ccd1aca64863d7b72eca.tar.bz2 alarm-manager-5969a4347544623bf0d4ccd1aca64863d7b72eca.zip |
Change GQaurk to char*
g_quark_from_string api causes memory increase
Change-Id: If4e6d8aab3352a63a22bcbd03064588b44ba5b5c
Signed-off-by: Inkyun Kil <inkyun.kil@samsung.com>
Signed-off-by: Jiwoong Im <jiwoong.im@samsung.com>
-rw-r--r-- | alarm-manager-registry.c | 81 | ||||
-rw-r--r-- | alarm-manager-schedule.c | 15 | ||||
-rw-r--r-- | alarm-manager.c | 232 | ||||
-rw-r--r-- | include/alarm-internal.h | 32 | ||||
-rw-r--r-- | src/alarm-lib-stub.c | 12 | ||||
-rw-r--r-- | src/alarm-lib.c | 12 |
6 files changed, 198 insertions, 186 deletions
diff --git a/alarm-manager-registry.c b/alarm-manager-registry.c index 0554c0a..60da8ee 100644 --- a/alarm-manager-registry.c +++ b/alarm-manager-registry.c @@ -69,19 +69,14 @@ bool _save_alarms(__alarm_info_t *__alarm_info) __alarm_info->uid, __alarm_info->pid, __alarm_info->global, - (char *)g_quark_to_string(__alarm_info->quark_caller_pkgid), - (char *)g_quark_to_string(__alarm_info->quark_callee_pkgid), - (char *)g_quark_to_string( - __alarm_info->quark_app_unique_name), - (char *)g_quark_to_string( - __alarm_info->quark_app_service_name), - (char *)g_quark_to_string( - __alarm_info->quark_app_service_name_mod), - (char *)g_quark_to_string( - __alarm_info->quark_bundle), - strlen((char *)g_quark_to_string(__alarm_info->quark_noti)), - (char *)g_quark_to_string( - __alarm_info->quark_noti), + CHECK_NULL_STRING(__alarm_info->caller_pkgid), + CHECK_NULL_STRING(__alarm_info->callee_pkgid), + CHECK_NULL_STRING(__alarm_info->app_unique_name), + CHECK_NULL_STRING(__alarm_info->app_service_name), + CHECK_NULL_STRING(__alarm_info->app_service_name_mod), + CHECK_NULL_STRING(__alarm_info->bundle), + __alarm_info->noti ? strlen(__alarm_info->noti) : 0, + CHECK_NULL_STRING(__alarm_info->noti), start->year, start->month, start->day, @@ -93,10 +88,8 @@ bool _save_alarms(__alarm_info_t *__alarm_info) mode->repeat, alarm_info->alarm_type, alarm_info->reserved_info, - (char *)g_quark_to_string( - __alarm_info->quark_dst_service_name), - (char *)g_quark_to_string( - __alarm_info->quark_dst_service_name_mod)); + CHECK_NULL_STRING(__alarm_info->dst_service_name), + CHECK_NULL_STRING(__alarm_info->dst_service_name_mod)); if (SQLITE_OK != sqlite3_exec(alarmmgr_db, query, NULL, NULL, &error_message)) { SECURE_LOGE("sqlite3_exec() is failed. query = %s, error message = %s", query, error_message); @@ -128,19 +121,14 @@ bool _update_alarms(__alarm_info_t *__alarm_info) __alarm_info->uid, __alarm_info->pid, __alarm_info->global, - (char *)g_quark_to_string(__alarm_info->quark_caller_pkgid), - (char *)g_quark_to_string(__alarm_info->quark_callee_pkgid), - (char *)g_quark_to_string( - __alarm_info->quark_app_unique_name), - (char *)g_quark_to_string( - __alarm_info->quark_app_service_name), - (char *)g_quark_to_string( - __alarm_info->quark_app_service_name_mod), - (char *)g_quark_to_string( - __alarm_info->quark_bundle), - strlen((char *)g_quark_to_string(__alarm_info->quark_noti)), - (char *)g_quark_to_string( - __alarm_info->quark_noti), + CHECK_NULL_STRING(__alarm_info->caller_pkgid), + CHECK_NULL_STRING(__alarm_info->callee_pkgid), + CHECK_NULL_STRING(__alarm_info->app_unique_name), + CHECK_NULL_STRING(__alarm_info->app_service_name), + CHECK_NULL_STRING(__alarm_info->app_service_name_mod), + CHECK_NULL_STRING(__alarm_info->bundle), + __alarm_info->noti ? strlen(__alarm_info->noti) : 0, + CHECK_NULL_STRING(__alarm_info->noti), start->year, start->month, start->day, @@ -152,10 +140,8 @@ bool _update_alarms(__alarm_info_t *__alarm_info) mode->repeat, alarm_info->alarm_type, alarm_info->reserved_info, - (char *)g_quark_to_string( - __alarm_info->quark_dst_service_name), - (char *)g_quark_to_string( - __alarm_info->quark_dst_service_name_mod), + CHECK_NULL_STRING(__alarm_info->dst_service_name), + CHECK_NULL_STRING(__alarm_info->dst_service_name_mod), __alarm_info->alarm_id); if (SQLITE_OK != sqlite3_exec(alarmmgr_db, query, NULL, NULL, &error_message)) { @@ -215,7 +201,7 @@ void _load_alarms_from_registry() for (i = 0; SQLITE_ROW == sqlite3_step(stmt); i++) { col_idx = 0; - __alarm_info = malloc(sizeof(__alarm_info_t)); + __alarm_info = (__alarm_info_t *)calloc(1, sizeof(__alarm_info_t)); if (G_UNLIKELY(__alarm_info == NULL)) { ALARM_MGR_EXCEPTION_PRINT("Memory allocation failed."); @@ -265,20 +251,17 @@ void _load_alarms_from_registry() strncpy(dst_service_name_mod, (const char *)sqlite3_column_text(stmt, col_idx++), MAX_SERVICE_NAME_LEN - 1); - __alarm_info->quark_caller_pkgid = g_quark_from_string(caller_pkgid); - __alarm_info->quark_callee_pkgid = g_quark_from_string(callee_pkgid); - __alarm_info->quark_app_unique_name = - g_quark_from_string(app_unique_name); - __alarm_info->quark_app_service_name = - g_quark_from_string(app_service_name); - __alarm_info->quark_app_service_name_mod = - g_quark_from_string(app_service_name_mod); - __alarm_info->quark_dst_service_name = - g_quark_from_string(dst_service_name); - __alarm_info->quark_dst_service_name_mod = - g_quark_from_string(dst_service_name_mod); - __alarm_info->quark_bundle = g_quark_from_string(bundle); - __alarm_info->quark_noti = g_quark_from_string(noti); + __alarm_info->caller_pkgid = STRDUP_WITH_NULLCMP(caller_pkgid); + __alarm_info->callee_pkgid = STRDUP_WITH_NULLCMP(callee_pkgid); + __alarm_info->app_unique_name = STRDUP_WITH_NULLCMP(app_unique_name); + __alarm_info->app_service_name = STRDUP_WITH_NULLCMP(app_service_name); + __alarm_info->app_service_name_mod = + STRDUP_WITH_NULLCMP(app_service_name_mod); + __alarm_info->dst_service_name = STRDUP_WITH_NULLCMP(dst_service_name); + __alarm_info->dst_service_name_mod = + STRDUP_WITH_NULLCMP(dst_service_name_mod); + __alarm_info->bundle = STRDUP_WITH_NULLCMP(bundle); + __alarm_info->noti = STRDUP_WITH_NULLCMP(noti); free(noti); if (is_disabled) { diff --git a/alarm-manager-schedule.c b/alarm-manager-schedule.c index bcf1f48..5837009 100644 --- a/alarm-manager-schedule.c +++ b/alarm-manager-schedule.c @@ -49,7 +49,7 @@ bool _alarm_schedule(void); bool _clear_scheduled_alarm_list() { - g_slist_free_full(g_scheduled_alarm_list, g_free); + g_slist_free_full(g_scheduled_alarm_list, free); g_scheduled_alarm_list = NULL; return true; @@ -89,18 +89,19 @@ bool _add_to_scheduled_alarm_list(__alarm_info_t *__alarm_info) alarm->pid = __alarm_info->pid; alarm->__alarm_info = __alarm_info; - SECURE_LOGD("%s :alarm->uid =%d, alarm->pid =%d, app_service_name=%s(%u)\n", + SECURE_LOGD("%s :alarm->uid =%d, alarm->pid =%d, app_service_name=%s\n", __FUNCTION__, alarm->uid, alarm->pid, - g_quark_to_string(alarm->__alarm_info->quark_app_service_name), - alarm->__alarm_info->quark_app_service_name); + alarm->__alarm_info->app_service_name); - if (alarm->__alarm_info->quark_app_service_name != g_quark_from_string(WAKEUP_ALARM_APP_ID)) { + if (alarm->__alarm_info->app_service_name && + strcmp(WAKEUP_ALARM_APP_ID, alarm->__alarm_info->app_service_name)) { g_scheduled_alarm_list = g_slist_append(g_scheduled_alarm_list, alarm); } else { for (iter = g_scheduled_alarm_list; iter != NULL; iter = g_slist_next(iter)) { count++; entry = iter->data; - if (entry->__alarm_info->quark_app_service_name != g_quark_from_string(WAKEUP_ALARM_APP_ID)) { + if (entry->__alarm_info->app_service_name && + strcmp(WAKEUP_ALARM_APP_ID, entry->__alarm_info->app_service_name)) { prior = true; break; } @@ -128,7 +129,7 @@ bool _remove_from_scheduled_alarm_list(uid_t uid, alarm_id_t alarm_id) alarm = iter->data; if (alarm->uid == uid && alarm->alarm_id == alarm_id) { g_scheduled_alarm_list = g_slist_remove(g_scheduled_alarm_list, iter->data); - g_free(alarm); + free(alarm); result = true; break; } diff --git a/alarm-manager.c b/alarm-manager.c index 7664a49..0a2c3b9 100644 --- a/alarm-manager.c +++ b/alarm-manager.c @@ -158,6 +158,7 @@ static bool __initialize_noti(); static bool __initialize_dbus(); static bool __initialize_db(); static void __initialize(); +void _release_alarm_info_t(); void on_bus_name_owner_changed(GDBusConnection *connection, const gchar *sender_name, const gchar *object_path, const gchar *interface_name, const gchar *signal_name, GVariant *parameters, gpointer user_data); bool __get_caller_unique_name(int pid, char *unique_name, bool *is_app, uid_t uid); @@ -452,7 +453,7 @@ int __set_time(time_t _time) bool __alarm_clean_list() { - g_slist_free_full(alarm_context.alarms, g_free); + g_slist_free_full(alarm_context.alarms, _release_alarm_info_t); return true; } @@ -514,7 +515,7 @@ static bool __check_bundle_for_update(const gchar *b_data, uid_t uid) bundle *b; bool ret = false; - if (strlen(b_data) == 4 && strncmp(b_data, "null", 4) == 0) + if (b_data == NULL) return true; b = bundle_decode((bundle_raw *)b_data, strlen(b_data)); @@ -552,7 +553,7 @@ static __alarm_info_t *__alarm_update_in_list(int uid, alarm_id_t alarm_id, if (update_flag == ALARM_UPDATE_FLAG_TIME || ALARM_UPDATE_FLAG_WEEK) { - if (!__check_bundle_for_update(g_quark_to_string(entry->quark_bundle), + if (!__check_bundle_for_update(entry->bundle, entry->uid)) { *error_code = ERR_ALARM_NOT_PERMITTED_APP; return NULL; @@ -624,7 +625,7 @@ static bool __alarm_remove_from_list(uid_t uid, alarm_id_t alarm_id, _delete_alarms(alarm_id); alarm_context.alarms = g_slist_remove(alarm_context.alarms, iter->data); - g_free(entry); + _release_alarm_info_t(entry); found = true; break; } @@ -873,9 +874,9 @@ static bool __alarm_create_appsvc(alarm_info_t *alarm_info, alarm_id_t *alarm_id __alarm_info_t *__alarm_info = NULL; - __alarm_info = malloc(sizeof(__alarm_info_t)); + __alarm_info = (__alarm_info_t *)calloc(1, sizeof(__alarm_info_t)); if (__alarm_info == NULL) { - SECURE_LOGE("Caution!! app_pid=%d, malloc failed. it seems to be OOM.", pid); + SECURE_LOGE("Caution!! app_pid=%d, calloc failed. it seems to be OOM.", pid); *error_code = ERR_ALARM_SYSTEM_FAIL; return false; } @@ -888,47 +889,39 @@ static bool __alarm_create_appsvc(alarm_info_t *alarm_info, alarm_id_t *alarm_id if (__get_cached_unique_name(pid, app_name, &caller_is_app, uid) == false) { *error_code = ERR_ALARM_SYSTEM_FAIL; - free(__alarm_info); + _release_alarm_info_t(__alarm_info); return false; } - __alarm_info->quark_app_unique_name = g_quark_from_string(app_name); + __alarm_info->app_unique_name = strdup(app_name); /* caller */ - __alarm_info->quark_caller_pkgid = g_quark_from_string("null"); - if (caller_is_app) { if (pkgmgrinfo_appinfo_get_usr_appinfo(app_name, uid, &caller_handle) == PMINFO_R_OK) { if (pkgmgrinfo_appinfo_get_pkgid(caller_handle, &caller_pkgid) == PMINFO_R_OK) { if (caller_pkgid) - __alarm_info->quark_caller_pkgid = g_quark_from_string(caller_pkgid); + __alarm_info->caller_pkgid = strdup(caller_pkgid); } pkgmgrinfo_appinfo_destroy_appinfo(caller_handle); } } /* callee */ - __alarm_info->quark_callee_pkgid = g_quark_from_string("null"); - b = bundle_decode((bundle_raw *)bundle_data, strlen(bundle_data)); callee_appid = appsvc_get_appid(b); if (pkgmgrinfo_appinfo_get_usr_appinfo(callee_appid, uid, &callee_handle) == PMINFO_R_OK) { if (pkgmgrinfo_appinfo_get_pkgid(callee_handle, &callee_pkgid) == PMINFO_R_OK) { if (callee_pkgid) - __alarm_info->quark_callee_pkgid = g_quark_from_string(callee_pkgid); + __alarm_info->callee_pkgid = strdup(callee_pkgid); } pkgmgrinfo_appinfo_destroy_appinfo(callee_handle); } SECURE_LOGD("caller_pkgid = %s, callee_pkgid = %s", - g_quark_to_string(__alarm_info->quark_caller_pkgid), g_quark_to_string(__alarm_info->quark_callee_pkgid)); + __alarm_info->caller_pkgid, __alarm_info->callee_pkgid); bundle_encode(b, &b_data, &datalen); - __alarm_info->quark_bundle = g_quark_from_string((const gchar *)b_data); - __alarm_info->quark_noti = g_quark_from_string("null"); - __alarm_info->quark_app_service_name = g_quark_from_string("null"); - __alarm_info->quark_dst_service_name = g_quark_from_string("null"); - __alarm_info->quark_app_service_name_mod = g_quark_from_string("null"); - __alarm_info->quark_dst_service_name_mod = g_quark_from_string("null"); + if (b_data) + __alarm_info->bundle = strdup((const gchar *)b_data); bundle_free(b); if (b_data) { @@ -950,7 +943,7 @@ static bool __alarm_create_appsvc(alarm_info_t *alarm_info, alarm_id_t *alarm_id due_time = _alarm_next_duetime(__alarm_info); if (__alarm_add_to_list(__alarm_info) == false) { - free(__alarm_info); + _release_alarm_info_t(__alarm_info); *error_code = ERR_ALARM_SYSTEM_FAIL; return false; } @@ -1006,9 +999,9 @@ static bool __alarm_create(alarm_info_t *alarm_info, alarm_id_t *alarm_id, uid_t __alarm_info_t *__alarm_info = NULL; - __alarm_info = malloc(sizeof(__alarm_info_t)); + __alarm_info = (__alarm_info_t *)calloc(1, sizeof(__alarm_info_t)); if (__alarm_info == NULL) { - SECURE_LOGE("Caution!! app_pid=%d, malloc " + SECURE_LOGE("Caution!! app_pid=%d, calloc " "failed. it seems to be OOM\n", pid); *error_code = ERR_ALARM_SYSTEM_FAIL; return false; @@ -1016,7 +1009,6 @@ static bool __alarm_create(alarm_info_t *alarm_info, alarm_id_t *alarm_id, uid_t __alarm_info->uid = uid; __alarm_info->pid = pid; __alarm_info->alarm_id = -1; - __alarm_info->quark_caller_pkgid = g_quark_from_string("null"); __alarm_info->method = method; __alarm_info->requested_interval = requested_interval; __alarm_info->is_ref = is_ref; @@ -1024,7 +1016,7 @@ static bool __alarm_create(alarm_info_t *alarm_info, alarm_id_t *alarm_id, uid_t if (__get_cached_unique_name(pid, unique_name, &caller_is_app, uid) == false) { *error_code = ERR_ALARM_SYSTEM_FAIL; - free(__alarm_info); + _release_alarm_info_t(__alarm_info); return false; } @@ -1033,22 +1025,23 @@ static bool __alarm_create(alarm_info_t *alarm_info, alarm_id_t *alarm_id, uid_t if (pkgmgrinfo_appinfo_get_usr_appinfo(unique_name, uid, &caller_handle) == PMINFO_R_OK) { if (pkgmgrinfo_appinfo_get_pkgid(caller_handle, &caller_pkgid) == PMINFO_R_OK) { if (caller_pkgid) - __alarm_info->quark_caller_pkgid = g_quark_from_string(caller_pkgid); + __alarm_info->caller_pkgid = strdup(caller_pkgid); } pkgmgrinfo_appinfo_destroy_appinfo(caller_handle); } } - __alarm_info->quark_callee_pkgid = g_quark_from_string("null"); - SECURE_LOGD("caller_pkgid = %s, callee_pkgid = null", g_quark_to_string(__alarm_info->quark_caller_pkgid)); + SECURE_LOGD("caller_pkgid = %s, callee_pkgid = null", __alarm_info->caller_pkgid); - __alarm_info->quark_app_unique_name = g_quark_from_string(unique_name); - __alarm_info->quark_app_service_name = g_quark_from_string(app_service_name); - __alarm_info->quark_app_service_name_mod = g_quark_from_string(app_service_name_mod); - __alarm_info->quark_dst_service_name = g_quark_from_string(dst_service_name); - __alarm_info->quark_dst_service_name_mod = g_quark_from_string(dst_service_name_mod); - __alarm_info->quark_bundle = g_quark_from_string("null"); - __alarm_info->quark_noti = g_quark_from_string("null"); + __alarm_info->app_unique_name = strdup(unique_name); + if (app_service_name) + __alarm_info->app_service_name = strdup(app_service_name); + if (app_service_name_mod) + __alarm_info->app_service_name_mod = strdup(app_service_name_mod); + if (dst_service_name) + __alarm_info->dst_service_name = strdup(dst_service_name); + if (dst_service_name_mod) + __alarm_info->dst_service_name_mod = strdup(dst_service_name_mod); __alarm_set_start_and_end_time(alarm_info, __alarm_info); memcpy(&(__alarm_info->alarm_info), alarm_info, sizeof(alarm_info_t)); @@ -1057,11 +1050,11 @@ static bool __alarm_create(alarm_info_t *alarm_info, alarm_id_t *alarm_id, uid_t time(¤t_time); SECURE_LOGD("[alarm-server]:pid=%d, app_unique_name=%s, " - "app_service_name=%s,dst_service_name=%s, c_due_time=%ld", \ - pid, g_quark_to_string(__alarm_info->quark_app_unique_name), \ - g_quark_to_string(__alarm_info->quark_app_service_name), \ - g_quark_to_string(__alarm_info->quark_dst_service_name), \ - alarm_context.c_due_time); + "app_service_name=%s,dst_service_name=%s, c_due_time=%ld", \ + pid, __alarm_info->app_unique_name, \ + __alarm_info->app_service_name, \ + __alarm_info->dst_service_name, \ + alarm_context.c_due_time); if (alarm_context.c_due_time < current_time) { ALARM_MGR_EXCEPTION_PRINT("Caution!! alarm_context.c_due_time " @@ -1071,7 +1064,7 @@ static bool __alarm_create(alarm_info_t *alarm_info, alarm_id_t *alarm_id, uid_t due_time = _alarm_next_duetime(__alarm_info); if (__alarm_add_to_list(__alarm_info) == false) { - free(__alarm_info); + _release_alarm_info_t(__alarm_info); return false; } @@ -1124,9 +1117,9 @@ static bool __alarm_create_noti(alarm_info_t *alarm_info, alarm_id_t *alarm_id, __alarm_info_t *__alarm_info = NULL; - __alarm_info = malloc(sizeof(__alarm_info_t)); + __alarm_info = (__alarm_info_t *)calloc(1, sizeof(__alarm_info_t)); if (__alarm_info == NULL) { - SECURE_LOGE("Caution!! app_pid=%d, malloc " + SECURE_LOGE("Caution!! app_pid=%d, calloc " "failed. it seems to be OOM\n", pid); *error_code = ERR_ALARM_SYSTEM_FAIL; return false; @@ -1139,33 +1132,26 @@ static bool __alarm_create_noti(alarm_info_t *alarm_info, alarm_id_t *alarm_id, if (__get_cached_unique_name(pid, app_name, &caller_is_app, uid) == false) { *error_code = ERR_ALARM_SYSTEM_FAIL; - free(__alarm_info); + _release_alarm_info_t(__alarm_info); return false; } - __alarm_info->quark_app_unique_name = g_quark_from_string(app_name); - - __alarm_info->quark_caller_pkgid = g_quark_from_string("null"); + __alarm_info->app_unique_name = strdup(app_name); if (caller_is_app) { if (pkgmgrinfo_appinfo_get_usr_appinfo(app_name, uid, &caller_handle) == PMINFO_R_OK) { if (pkgmgrinfo_appinfo_get_pkgid(caller_handle, &caller_pkgid) == PMINFO_R_OK) { if (caller_pkgid) - __alarm_info->quark_caller_pkgid = g_quark_from_string(caller_pkgid); + __alarm_info->caller_pkgid = strdup(caller_pkgid); } pkgmgrinfo_appinfo_destroy_appinfo(caller_handle); } } - __alarm_info->quark_callee_pkgid = g_quark_from_string("null"); SECURE_LOGD("caller_pkgid = %s, callee_pkgid = null", - g_quark_to_string(__alarm_info->quark_caller_pkgid)); + __alarm_info->caller_pkgid); - __alarm_info->quark_bundle = g_quark_from_string("null"); - __alarm_info->quark_noti = g_quark_from_string(noti_data); - __alarm_info->quark_app_service_name = g_quark_from_string("null"); - __alarm_info->quark_dst_service_name = g_quark_from_string("null"); - __alarm_info->quark_app_service_name_mod = g_quark_from_string("null"); - __alarm_info->quark_dst_service_name_mod = g_quark_from_string("null"); + if (noti_data) + __alarm_info->noti = strdup(noti_data); __alarm_set_start_and_end_time(alarm_info, __alarm_info); memcpy(&(__alarm_info->alarm_info), alarm_info, sizeof(alarm_info_t)); @@ -1174,11 +1160,11 @@ static bool __alarm_create_noti(alarm_info_t *alarm_info, alarm_id_t *alarm_id, time(¤t_time); SECURE_LOGD("[alarm-server]:pid=%d, app_unique_name=%s, " - "app_service_name=%s,dst_service_name=%s, c_due_time=%ld", \ - pid, g_quark_to_string(__alarm_info->quark_app_unique_name), \ - g_quark_to_string(__alarm_info->quark_app_service_name), \ - g_quark_to_string(__alarm_info->quark_dst_service_name), \ - alarm_context.c_due_time); + "app_service_name=%s,dst_service_name=%s, c_due_time=%ld", \ + pid, __alarm_info->app_unique_name, \ + __alarm_info->app_service_name, \ + __alarm_info->dst_service_name, \ + alarm_context.c_due_time); if (alarm_context.c_due_time < current_time) { ALARM_MGR_EXCEPTION_PRINT("Caution!! alarm_context.c_due_time " @@ -1188,7 +1174,7 @@ static bool __alarm_create_noti(alarm_info_t *alarm_info, alarm_id_t *alarm_id, due_time = _alarm_next_duetime(__alarm_info); if (__alarm_add_to_list(__alarm_info) == false) { - free(__alarm_info); + _release_alarm_info_t(__alarm_info); return false; } @@ -1752,10 +1738,10 @@ static void __alarm_expired() /* Case #1. The process is an application launched by app_control. * It registered an alarm using launch-based APIs like alarm_schedule_xxx, alarmmgr_xxx_appsvc. */ - if (strncmp(g_quark_to_string(__alarm_info->quark_bundle), "null", 4) != 0) { - b_len = strlen(g_quark_to_string(__alarm_info->quark_bundle)); + if (__alarm_info->bundle != NULL) { + b_len = strlen(__alarm_info->bundle); - b = bundle_decode((bundle_raw *)g_quark_to_string(__alarm_info->quark_bundle), b_len); + b = bundle_decode((bundle_raw *)(__alarm_info->bundle), b_len); if (b == NULL) { ALARM_MGR_EXCEPTION_PRINT("Error!!!..Unable to decode the bundle!!\n"); @@ -1808,12 +1794,12 @@ static void __alarm_expired() } bundle_free(b); } - } else if (strncmp(g_quark_to_string(__alarm_info->quark_noti), "null", 4) != 0) { + } else if (__alarm_info->noti != NULL) { guchar *noti_data; int datalen; ret = -1; - noti_data = g_base64_decode(g_quark_to_string(__alarm_info->quark_noti), + noti_data = g_base64_decode(__alarm_info->noti, (gsize *)&datalen); if (noti_data) { ret = __post_notification(noti_data, datalen, __alarm_info->uid); @@ -1827,14 +1813,14 @@ static void __alarm_expired() pkgmgrinfo_appinfo_h appinfo_handle = NULL; struct running_info_t app_info; - if (g_quark_to_string(__alarm_info->quark_bundle) != NULL && strncmp(g_quark_to_string(__alarm_info->quark_dst_service_name), "null", 4) == 0) { - SECURE_LOGD("[alarm-server]:destination is null, so we send expired alarm to %s(%u).", - g_quark_to_string(__alarm_info->quark_app_service_name), __alarm_info->quark_app_service_name); - destination_app_service_name = g_quark_to_string(__alarm_info->quark_app_service_name_mod); + if (__alarm_info->dst_service_name == NULL) { + SECURE_LOGD("[alarm-server]:destination is null, so we send expired alarm to %s.", + __alarm_info->app_service_name); + destination_app_service_name = __alarm_info->app_service_name_mod; } else { - SECURE_LOGD("[alarm-server]:destination :%s(%u)", - g_quark_to_string(__alarm_info->quark_dst_service_name), __alarm_info->quark_dst_service_name); - destination_app_service_name = g_quark_to_string(__alarm_info->quark_dst_service_name_mod); + SECURE_LOGD("[alarm-server]:destination :%s", + __alarm_info->dst_service_name); + destination_app_service_name = __alarm_info->dst_service_name_mod; } /* @@ -1846,12 +1832,12 @@ static void __alarm_expired() */ SECURE_LOGD("[alarm-server]: destination_app_service_name :%s, app_pid=%d", destination_app_service_name, app_pid); - if (g_quark_to_string(__alarm_info->quark_dst_service_name) != NULL && strncmp(g_quark_to_string(__alarm_info->quark_dst_service_name), "null", 4) == 0) { - if (g_quark_to_string(__alarm_info->quark_app_service_name) != NULL && strlen(g_quark_to_string(__alarm_info->quark_app_service_name)) > 6) - strncpy(appid, g_quark_to_string(__alarm_info->quark_app_service_name) + 6, strlen(g_quark_to_string(__alarm_info->quark_app_service_name)) - 6); + if (__alarm_info->dst_service_name == NULL) { + if (__alarm_info->app_service_name != NULL && strlen(__alarm_info->app_service_name) > 6) + strncpy(appid, __alarm_info->app_service_name + 6, strlen(__alarm_info->app_service_name) - 6); } else { - if (g_quark_to_string(__alarm_info->quark_dst_service_name) != NULL && strlen(g_quark_to_string(__alarm_info->quark_dst_service_name)) > 6) - strncpy(appid, g_quark_to_string(__alarm_info->quark_dst_service_name) + 6, strlen(g_quark_to_string(__alarm_info->quark_dst_service_name)) - 6); + if (strlen(__alarm_info->dst_service_name) > 6) + strncpy(appid, __alarm_info->dst_service_name + 6, strlen(__alarm_info->dst_service_name) - 6); } ret = pkgmgrinfo_appinfo_get_usr_appinfo(appid, __alarm_info->uid, &appinfo_handle); @@ -2052,7 +2038,7 @@ static int __on_app_enable_cb(uid_t target_uid, int req_id, entry = gs_iter->data; gs_iter = g_slist_next(gs_iter); - if (strncmp(appid, g_quark_to_string(entry->quark_app_unique_name), strlen(appid)) == 0) { + if (strncmp(appid, entry->app_unique_name, strlen(appid)) == 0) { duetime = _alarm_next_duetime(entry); SECURE_LOGD("Restore alarm_id(%d) duetime(%d) appid(%s)", entry->alarm_id, duetime, appid); alarm_context.alarms = g_slist_append(alarm_context.alarms, entry); @@ -2091,7 +2077,7 @@ static int __on_app_disable_cb(uid_t target_uid, int req_id, entry = gs_iter->data; gs_iter = g_slist_next(gs_iter); - if (strncmp(appid, g_quark_to_string(entry->quark_app_unique_name), strlen(appid)) == 0) { + if (strncmp(appid, entry->app_unique_name, strlen(appid)) == 0) { if (!(entry->alarm_info.alarm_type & ALARM_TYPE_VOLATILE)) _update_db_for_disabled_alarm(entry->alarm_id, true); g_disabled_alarm_list = g_slist_append(g_disabled_alarm_list, entry); @@ -2126,8 +2112,8 @@ static int __on_app_uninstalled(uid_t target_uid, int req_id, const char *pkg_ty for (gs_iter = alarm_context.alarms; gs_iter != NULL;) { entry = gs_iter->data; - const char* caller_pkgid = g_quark_to_string(entry->quark_caller_pkgid); - const char* callee_pkgid = g_quark_to_string(entry->quark_callee_pkgid); + const char* caller_pkgid = entry->caller_pkgid; + const char* callee_pkgid = entry->callee_pkgid; gs_iter = g_slist_next(gs_iter); if ((caller_pkgid && strncmp(pkgid, caller_pkgid, strlen(pkgid)) == 0) || @@ -2146,7 +2132,7 @@ static int __on_app_uninstalled(uid_t target_uid, int req_id, const char *pkg_ty SECURE_LOGD("Remove pkgid[%s], alarm_id[%d]", pkgid, entry->alarm_id); alarm_context.alarms = g_slist_remove(alarm_context.alarms, entry); - g_free(entry); + _release_alarm_info_t(entry); } } @@ -2876,6 +2862,8 @@ gboolean alarm_manager_alarm_create(AlarmManager *obj, GDBusMethodInvocation *in int uid; int pid; const char *name = g_dbus_method_invocation_get_sender(invoc); + char *_reserved_service_name = NULL; + char *_reserved_service_name_mod = NULL; pid = __get_caller_pid(name); uid = __get_caller_uid(name); @@ -2904,8 +2892,13 @@ gboolean alarm_manager_alarm_create(AlarmManager *obj, GDBusMethodInvocation *in alarm_info.alarm_type = alarm_type; alarm_info.reserved_info = reserved_info; + if (strcmp(reserved_service_name, "null") == 0) + _reserved_service_name = NULL; + if (strcmp(reserved_service_name_mod, "null") == 0) + _reserved_service_name_mod = NULL; + if (!__alarm_create(&alarm_info, &alarm_id, uid, pid, 0, 0, 0, app_service_name, app_service_name_mod, - reserved_service_name, reserved_service_name_mod, &return_code)) { + _reserved_service_name, _reserved_service_name_mod, &return_code)) { ALARM_MGR_EXCEPTION_PRINT("Unable to create alarm! return_code[%d]", return_code); #ifdef _APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG strncpy(log_tag, "FAIL: CREATE", strlen("FAIL: CREATE")); @@ -2997,7 +2990,7 @@ gboolean alarm_manager_alarm_create_periodic(AlarmManager *obj, GDBusMethodInvoc if (!__alarm_create(&alarm_info, &alarm_id, uid, pid, method, interval * 60, is_ref, app_service_name, app_service_name_mod, - "null", "null", &return_code)) { + NULL, NULL, &return_code)) { ALARM_MGR_EXCEPTION_PRINT("Unable to create alarm! return_code[%d]", return_code); #ifdef _APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG strncpy(log_tag, "FAIL: CREATE", strlen("FAIL: CREATE")); @@ -3106,7 +3099,7 @@ gboolean alarm_manager_alarm_delete_all(AlarmManager *obj, GDBusMethodInvocation for (gs_iter = alarm_context.alarms; gs_iter != NULL;) { bool is_found = false; entry = gs_iter->data; - const char* tmp_appname = g_quark_to_string(entry->quark_app_unique_name); + const char* tmp_appname = entry->app_unique_name; SECURE_LOGD("Try to remove app_name[%s], alarm_id[%d]\n", tmp_appname, entry->alarm_id); if (tmp_appname && strncmp(app_name, tmp_appname, strlen(tmp_appname)) == 0) { if (_remove_from_scheduled_alarm_list(uid, entry->alarm_id)) @@ -3126,7 +3119,7 @@ gboolean alarm_manager_alarm_delete_all(AlarmManager *obj, GDBusMethodInvocation ALARM_MGR_LOG_PRINT("alarm_id[%d] is removed.", entry->alarm_id); SECURE_LOGD("Removing is done. app_name[%s], alarm_id [%d]\n", tmp_appname, entry->alarm_id); alarm_context.alarms = g_slist_remove(alarm_context.alarms, entry); - g_free(entry); + _release_alarm_info_t(entry); } } @@ -3247,9 +3240,9 @@ gboolean alarm_manager_alarm_get_number_of_ids(AlarmManager *pObject, GDBusMetho for (gs_iter = alarm_context.alarms; gs_iter != NULL; gs_iter = g_slist_next(gs_iter)) { entry = gs_iter->data; - SECURE_LOGD("app_name=%s, quark_app_unique_name=%s", app_name, g_quark_to_string(entry->quark_app_unique_name)); + SECURE_LOGD("app_name=%s, app_unique_name=%s", app_name, entry->app_unique_name); if (entry->uid == uid && - strncmp(app_name, g_quark_to_string(entry->quark_app_unique_name), strlen(app_name)) == 0) { + strncmp(app_name, entry->app_unique_name, strlen(app_name)) == 0) { (num_of_ids)++; SECURE_LOGD("inc number of alarms of app (uid:%d, pid:%d, unique_name:%s) is %d.", uid, pid, app_name, num_of_ids); } @@ -3301,7 +3294,7 @@ gboolean alarm_manager_alarm_get_list_of_ids(AlarmManager *pObject, GDBusMethodI for (gs_iter = alarm_context.alarms; gs_iter != NULL; gs_iter = g_slist_next(gs_iter)) { entry = gs_iter->data; if (entry->uid == uid && - strncmp(app_name, g_quark_to_string(entry->quark_app_unique_name), strlen(app_name)) == 0) { + strncmp(app_name, (entry->app_unique_name), strlen(app_name)) == 0) { g_variant_builder_add(builder, "i", entry->alarm_id); index++; SECURE_LOGE("called for alarmid(%d), but max_number_of_ids(%d) index %d.", entry->alarm_id, max_number_of_ids, index); @@ -3342,13 +3335,13 @@ gboolean alarm_manager_alarm_get_appsvc_info(AlarmManager *pObject, GDBusMethodI entry = gs_iter->data; if (entry->uid == uid && entry->alarm_id == alarm_id) { found = true; - b_data = g_strdup(g_quark_to_string(entry->quark_bundle)); + b_data = g_strdup(entry->bundle); break; } } if (found) { - if (b_data && strlen(b_data) == 4 && strncmp(b_data, "null", 4) == 0) { + if (b_data == NULL) { ALARM_MGR_EXCEPTION_PRINT("The alarm(%d) is an regular alarm, not svc alarm.", alarm_id); return_code = ERR_ALARM_INVALID_TYPE; } @@ -3386,13 +3379,13 @@ gboolean alarm_manager_alarm_get_noti_info(AlarmManager *pObject, GDBusMethodInv entry = gs_iter->data; if (entry->uid == uid && entry->alarm_id == alarm_id) { found = true; - noti_data = strdup(g_quark_to_string(entry->quark_noti)); + noti_data = strdup(entry->noti); break; } } if (found) { - if (noti_data && strlen(noti_data) == 4 && strncmp(noti_data, "null", 4) == 0) { + if (noti_data == NULL) { ALARM_MGR_EXCEPTION_PRINT("The alarm(%d) is an regular alarm, not svc alarm.", alarm_id); return_code = ERR_ALARM_INVALID_TYPE; } @@ -3567,7 +3560,7 @@ gboolean alarm_manager_alarm_get_all_info(AlarmManager *pObject, GDBusMethodInvo continue; ++index; SECURE_LOGD("#%d alarm id[%d] app_name[%s] duetime[%ld]", - index, entry->alarm_id, g_quark_to_string(entry->quark_app_unique_name), entry->start); + index, entry->alarm_id, entry->app_unique_name, entry->start); alarm_info_t *alarm_info = (alarm_info_t *) &(entry->alarm_info); alarm_mode_t *mode = &alarm_info->mode; @@ -3582,11 +3575,11 @@ gboolean alarm_manager_alarm_get_all_info(AlarmManager *pObject, GDBusMethodInvo (int)entry->end, (int)entry->pid, (bool)entry->global, - (char *)g_quark_to_string(entry->quark_caller_pkgid), - (char *)g_quark_to_string(entry->quark_callee_pkgid), - (char *)g_quark_to_string(entry->quark_app_unique_name), - (char *)g_quark_to_string(entry->quark_app_service_name), - (char *)g_quark_to_string(entry->quark_dst_service_name), + CHECK_NULL_STRING(entry->caller_pkgid), + CHECK_NULL_STRING(entry->callee_pkgid), + CHECK_NULL_STRING(entry->app_unique_name), + CHECK_NULL_STRING(entry->app_service_name), + CHECK_NULL_STRING(entry->dst_service_name), mode->u_interval.day_of_week, mode->repeat, entry->alarm_info.alarm_type); @@ -3644,9 +3637,10 @@ gboolean alarm_manager_alarm_set_global(AlarmManager *pObject, GDBusMethodInvoca } else { ALARM_MGR_LOG_PRINT("The alarm(%d) is found.", alarm_id); - callee_pkgid = (char *)g_quark_to_string(entry->quark_callee_pkgid); - if (strncmp(callee_pkgid, "null", strlen(callee_pkgid)) == 0) - callee_pkgid = (char *)g_quark_to_string(entry->quark_app_service_name)+6; + if (entry->callee_pkgid == NULL) + callee_pkgid = entry->app_service_name + 6; + else + callee_pkgid = entry->callee_pkgid; ALARM_MGR_LOG_PRINT("The alarm pkgid : %s.", callee_pkgid); @@ -4051,6 +4045,34 @@ static void __initialize() } } +void _release_alarm_info_t(__alarm_info_t *entry) +{ + if (!entry) + return; + + if (entry->caller_pkgid) + free(entry->caller_pkgid); + if (entry->callee_pkgid) + free(entry->callee_pkgid); + if (entry->app_unique_name) + free(entry->app_unique_name); + if (entry->app_service_name) + free(entry->app_service_name); + if (entry->app_service_name_mod) + free(entry->app_service_name_mod); + if (entry->dst_service_name) + free(entry->dst_service_name); + + if (entry->dst_service_name_mod) + free(entry->dst_service_name_mod); + if (entry->bundle) + free(entry->bundle); + if (entry->noti) + free(entry->noti); + + free(entry); +} + int main() { GMainLoop *mainloop = NULL; diff --git a/include/alarm-internal.h b/include/alarm-internal.h index dd4495c..ffe7a0a 100644 --- a/include/alarm-internal.h +++ b/include/alarm-internal.h @@ -79,8 +79,8 @@ typedef struct { alarm_cb_t alarm_handler; int handler_id; void *user_param; - GQuark quark_app_service_name; /*dbus_service_name is converted to quark value*/ - GQuark quark_app_service_name_mod; + char *app_service_name; + char *app_service_name_mod; } alarm_context_t; typedef union { @@ -173,22 +173,17 @@ typedef struct { alarm_id_t alarm_id; uid_t uid; int pid; - GQuark quark_caller_pkgid; - GQuark quark_callee_pkgid; - GQuark quark_app_unique_name; /*the fullpath of application's pid is - converted to quark value.*/ - GQuark quark_app_service_name; /*dbus_service_name is converted to - quark value.app_service_name is a service name of application - that creates alarm_info.*/ - GQuark quark_app_service_name_mod; - GQuark quark_dst_service_name; /*dbus_service_name is converted to - quark value.app_service_name is a service name for - dst_service_name of alarm_create_extend().*/ - GQuark quark_dst_service_name_mod; + char *caller_pkgid; + char *callee_pkgid; + char *app_unique_name; + char *app_service_name; + char *app_service_name_mod; + char *dst_service_name; + char *dst_service_name_mod; time_t due_time; - GQuark quark_bundle; /*Bundle Content containing app-svc info*/ - GQuark quark_noti; + char *bundle; + char *noti; alarm_info_t alarm_info; @@ -231,6 +226,8 @@ typedef struct _bg_category_cb_info_t { bool has_bg; } bg_category_cb_info_t; +void _release_alarm_info_t(); + time_t _alarm_next_duetime(__alarm_info_t *alarm_info); bool _alarm_schedule(); bool _clear_scheduled_alarm_list(); @@ -262,4 +259,7 @@ void _update_db_for_disabled_alarm(alarm_id_t alarm_id, bool disabled_by_ups); #define ALARM_MGR_ASSERT_PRINT(FMT, ARG...) LOGE(FMT, ##ARG) #endif +#define CHECK_NULL_STRING(x) x ? x : "null" +#define STRDUP_WITH_NULLCMP(a) strcmp(a, "null") ? strdup(a) : NULL + #endif /*_ALARM_INTERNAL_H*/ diff --git a/src/alarm-lib-stub.c b/src/alarm-lib-stub.c index 6d40278..e7f3d94 100644 --- a/src/alarm-lib-stub.c +++ b/src/alarm-lib-stub.c @@ -202,7 +202,7 @@ bool _send_alarm_create(alarm_context_t context, alarm_info_t *alarm_info, int return_code = 0; /*TODO: Dbus bus name validation is must & will be added to avoid alarm-server crash*/ - if (g_quark_to_string(context.quark_app_service_name) == NULL + if (context.app_service_name == NULL && strlen(dst_service_name) == 4 && strncmp(dst_service_name, "null", 4) == 0) { ALARM_MGR_EXCEPTION_PRINT("Invalid arg. Provide valid destination or call alarmmgr_init()\n"); @@ -212,8 +212,8 @@ bool _send_alarm_create(alarm_context_t context, alarm_info_t *alarm_info, } if (!alarm_manager_call_alarm_create_sync((AlarmManager*)context.proxy, - g_quark_to_string(context.quark_app_service_name), - g_quark_to_string(context.quark_app_service_name_mod), + context.app_service_name, + context.app_service_name_mod, alarm_info->start.year, alarm_info->start.month, alarm_info->start.day, @@ -264,7 +264,7 @@ bool _send_alarm_create_periodic(alarm_context_t context, int interval, int is_r GError *error = NULL; int return_code = 0; - if (g_quark_to_string(context.quark_app_service_name) == NULL) { + if (context.app_service_name == NULL) { ALARM_MGR_EXCEPTION_PRINT("Invalid arg. Provide valid destination or call alarmmgr_init()\n"); if (error_code) *error_code = ERR_ALARM_INVALID_PARAM; @@ -272,8 +272,8 @@ bool _send_alarm_create_periodic(alarm_context_t context, int interval, int is_r } if (!alarm_manager_call_alarm_create_periodic_sync((AlarmManager*)context.proxy, - g_quark_to_string(context.quark_app_service_name), - g_quark_to_string(context.quark_app_service_name_mod), + context.app_service_name, + context.app_service_name_mod, interval, is_ref, method, alarm_id, &return_code, NULL, &error)) { ALARM_MGR_EXCEPTION_PRINT("alarm_manager_call_alarm_create_periodic_sync()failed. alarm_id[%d], return_code[%d]", diff --git a/src/alarm-lib.c b/src/alarm-lib.c index 7be1e5d..93626ec 100644 --- a/src/alarm-lib.c +++ b/src/alarm-lib.c @@ -510,7 +510,7 @@ EXPORT_API int alarmmgr_init(const char *appid) if (b_initialized) { SECURE_LOGD("alarm was already initialized. app_service_name=%s", - g_quark_to_string(alarm_context.quark_app_service_name)); + alarm_context.app_service_name); return ALARMMGR_RESULT_SUCCESS; } @@ -564,8 +564,8 @@ EXPORT_API int alarmmgr_init(const char *appid) goto error; } - alarm_context.quark_app_service_name = g_quark_from_string(service_name); - alarm_context.quark_app_service_name_mod = g_quark_from_string(service_name_mod); + alarm_context.app_service_name = strdup(service_name); + alarm_context.app_service_name_mod = strdup(service_name_mod); b_initialized = true; @@ -628,6 +628,12 @@ EXPORT_API void alarmmgr_fini() alarm_context.session_conn = NULL; } + if (alarm_context.app_service_name) + free(alarm_context.app_service_name); + if (alarm_context.app_service_name_mod) + free(alarm_context.app_service_name_mod); + + b_initialized = false; sub_initialized = false; |