summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorInkyun Kil <inkyun.kil@samsung.com>2017-06-02 17:36:43 +0900
committerJiwoong Im <jiwoong.im@samsung.com>2017-07-06 18:59:55 +0900
commit5969a4347544623bf0d4ccd1aca64863d7b72eca (patch)
tree16fb2dd1bba9cf2b9b2c18983fc2185d38e16dc4
parent8572900aa8c8038538efbf924203f352c3ca9e7b (diff)
downloadalarm-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.c81
-rw-r--r--alarm-manager-schedule.c15
-rw-r--r--alarm-manager.c232
-rw-r--r--include/alarm-internal.h32
-rw-r--r--src/alarm-lib-stub.c12
-rw-r--r--src/alarm-lib.c12
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(&current_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(&current_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;