static char g_appid[MAX_APP_ID];
static int flag_appid_checked;
-static alarm_context_t alarm_context = { NULL, NULL, NULL, 0, NULL, NULL, -1 };
+static alarm_context_t alarm_context;
static bool b_initialized = false;
static bool sub_initialized = false;
static gboolean __handle_millisec_accuracy(gpointer data)
{
- alarm_cb_info_t *info = (alarm_cb_info_t *)data;
- info->cb_func(info->alarm_id, info->priv_data);
+ if (data == NULL) {
+ alarm_context.alarm_handler(alarm_context.handler_id,
+ alarm_context.user_param);
+ } else {
+ alarm_cb_info_t *info = (alarm_cb_info_t *)data;
+ info->cb_func(info->alarm_id, info->priv_data);
+ }
return FALSE;
}
g_variant_get(param, "(ii&s)", &alarm_id, &msec, &package_name);
ALARM_MGR_LOG_PRINT("[alarm-lib] : Alarm expired for [%s] : Alarm id [%d]", package_name, alarm_id);
- if (alarm_context.alarm_handler != NULL)
- alarm_context.alarm_handler(alarm_id, alarm_context.user_param);
+ if (alarm_context.alarm_handler != NULL) {
+ if (msec > 0) {
+ gettimeofday(¤t_time, NULL);
+ msec = msec - (int)current_time.tv_usec / 1000;
+ if (msec > 0) {
+ alarm_context.handler_id = alarm_id;
+ g_timeout_add_full(G_PRIORITY_HIGH, (guint)msec,
+ __handle_millisec_accuracy, NULL, NULL);
+ } else {
+ alarm_context.alarm_handler(alarm_id,
+ alarm_context.user_param);
+ }
+ } else {
+ alarm_context.alarm_handler(alarm_id,
+ alarm_context.user_param);
+ }
+ }
info = __find_resultcb(alarm_id);
if (info && info->cb_func) {