static struct info {
Eina_List *item_list;
- struct item *update;
+ Eina_List *update_list;
Eina_List *pending_list;
Ecore_Timer *pending_timer;
Eina_List *pd_open_pending_list;
int pending_timer_freezed;
} s_info = {
.item_list = NULL,
- .update = NULL,
+ .update_list = NULL,
.pending_list = NULL,
.pending_timer = NULL,
.pd_open_pending_list = NULL,
static void pending_timer_thaw(void)
{
DbgPrint("Freezed Count: %d\n", s_info.pending_timer_freezed);
- if (!s_info.pending_timer_freezed)
+ if (!s_info.pending_timer_freezed) {
return;
+ }
s_info.pending_timer_freezed--;
if (s_info.pending_timer && !s_info.pending_timer_freezed) {
i = 0;
EINA_LIST_FOREACH(s_info.pd_list, l, tmp) {
- if (pkgname && !strcmp(pkgname, tmp))
+ if (pkgname && !strcmp(pkgname, tmp)) {
return 1;
+ }
i++;
}
struct item *item;
item = eina_list_nth(s_info.pd_open_pending_list, 0);
- if (!item)
+ if (!item) {
goto cleanout;
+ }
- if (s_info.update)
+ if (eina_list_data_find(s_info.update_list, item)) {
return ECORE_CALLBACK_RENEW;
+ }
s_info.pd_open_pending_list = eina_list_remove(s_info.pd_open_pending_list, item);
/*!
/* Item is destroyed */
}
- if (s_info.pd_open_pending_list)
+ if (s_info.pd_open_pending_list) {
return ECORE_CALLBACK_RENEW;
+ }
cleanout:
s_info.pd_open_pending_timer = NULL;
struct item *item;
item = eina_list_nth(s_info.pending_list, 0);
- if (!item)
+ if (!item) {
goto cleanout;
+ }
- if (s_info.update || pd_is_opened(item->inst->item->pkgname) < 0)
+ if (eina_list_data_find(s_info.update_list, item) || pd_is_opened(item->inst->item->pkgname) < 0) {
return ECORE_CALLBACK_RENEW;
+ }
s_info.pending_list = eina_list_remove(s_info.pending_list, item);
/*!
/* item is destroyed */
}
- if (s_info.pending_list)
+ if (s_info.pending_list) {
return ECORE_CALLBACK_RENEW;
+ }
cleanout:
s_info.pending_timer = NULL;
static inline __attribute__((always_inline)) int activate_pending_consumer(void)
{
- if (s_info.pending_timer)
+ if (s_info.pending_timer) {
return 0;
+ }
s_info.pending_timer = ecore_timer_add(0.000001f, pended_cmd_consumer_cb, NULL);
if (!s_info.pending_timer) {
* Do not increase the freezed counter.
* Just freeze the timer.
*/
- if (s_info.pending_timer_freezed)
+ if (s_info.pending_timer_freezed) {
ecore_timer_freeze(s_info.pending_timer);
+ }
return 0;
}
static inline void deactivate_pending_consumer(void)
{
- if (!s_info.pending_timer)
+ if (!s_info.pending_timer) {
return;
+ }
ecore_timer_del(s_info.pending_timer);
s_info.pending_timer = NULL;
static inline void deactivate_pd_open_pending_consumer(void)
{
- if (!s_info.pd_open_pending_timer)
+ if (!s_info.pd_open_pending_timer) {
return;
+ }
ecore_timer_del(s_info.pd_open_pending_timer);
s_info.pd_open_pending_timer = NULL;
static inline int __attribute__((always_inline)) activate_pd_open_pending_consumer(void)
{
- if (s_info.pd_open_pending_timer)
+ if (s_info.pd_open_pending_timer) {
return 0;
+ }
s_info.pd_open_pending_timer = ecore_timer_add(0.000001f, pd_open_pended_cmd_consumer_cb, NULL);
if (!s_info.pd_open_pending_timer) {
int cnt = 0;
EINA_LIST_FOREACH_SAFE(s_info.pending_list, l, n, item) {
- if (strcmp(pkgname, item->inst->item->pkgname))
+ if (strcmp(pkgname, item->inst->item->pkgname)) {
continue;
+ }
s_info.pending_list = eina_list_remove(s_info.pending_list, item);
s_info.pd_open_pending_list = eina_list_append(s_info.pd_open_pending_list, item);
cnt++;
}
- if (s_info.pd_open_pending_list)
+ if (s_info.pd_open_pending_list) {
activate_pd_open_pending_consumer();
+ }
- if (!s_info.pending_list)
+ if (!s_info.pending_list) {
deactivate_pending_consumer();
+ }
}
static inline void migrate_to_pending_list(const char *pkgname)
int cnt = 0;
EINA_LIST_FOREACH_SAFE(s_info.pd_open_pending_list, l, n, item) {
- if (strcmp(pkgname, item->inst->item->pkgname))
+ if (strcmp(pkgname, item->inst->item->pkgname)) {
continue;
+ }
s_info.pd_open_pending_list = eina_list_remove(s_info.pd_open_pending_list, item);
s_info.pending_list = eina_list_append(s_info.pending_list, item);
cnt++;
}
- if (s_info.pending_list)
+ if (s_info.pending_list) {
activate_pending_consumer();
+ }
- if (!s_info.pd_open_pending_list)
+ if (!s_info.pd_open_pending_list) {
deactivate_pd_open_pending_consumer();
+ }
}
static inline int is_pended_item(struct item *item)
return LB_STATUS_ERROR_EXIST;
}
- if (activate_pending_consumer() < 0)
+ if (activate_pending_consumer() < 0) {
return LB_STATUS_ERROR_FAULT;
+ }
s_info.pending_list = eina_list_append(s_info.pending_list, item);
}
double delay;
double sleep_time;
- if (!item->timer)
+ if (!item->timer) {
return 0;
+ }
ecore_timer_thaw(item->timer);
period = ecore_timer_interval_get(item->timer);
delay = util_time_delay_for_compensation(period) - pending;
ecore_timer_delay(item->timer, delay);
- if (item->sleep_at == 0.0f)
+ if (item->sleep_at == 0.0f) {
return 0;
+ }
sleep_time = util_timestamp() - item->sleep_at;
item->sleep_at = 0.0f;
return UPDATE_NOT_INVOKED;
}
-static inline void timer_freeze(struct item *item)
+static void timer_freeze(struct item *item)
{
- struct timeval tv;
-
- if (!item->timer)
+ if (!item->timer) {
return;
+ }
ecore_timer_freeze(item->timer);
- if (ecore_timer_interval_get(item->timer) <= 1.0f)
+ if (ecore_timer_interval_get(item->timer) <= 1.0f) {
return;
+ }
+#if defined(_USE_ECORE_TIME_GET)
+ item->sleep_at = ecore_time_get();
+#else
+ struct timeval tv;
if (gettimeofday(&tv, NULL) < 0) {
ErrPrint("gettimeofday: %s\n", strerror(errno));
tv.tv_sec = 0;
}
item->sleep_at = (double)tv.tv_sec + (double)tv.tv_usec / 1000000.0f;
+#endif
}
static inline void update_monitor_cnt(struct item *item)
* file update callback.
*/
if (interval >= MINIMUM_UPDATE_INTERVAL) {
- if (s_info.update == item) {
+ if (eina_list_data_find(s_info.update_list, item)) {
/*!
* \note
* If already in updating mode,
struct item *item;
EINA_LIST_FOREACH(s_info.item_list, l, item) {
- if (item->inst == inst)
+ if (item->inst == inst) {
return l;
+ }
}
return NULL;
}
if (item->monitor_cnt == 0) {
- if (!invalid)
+ if (!invalid) {
fault_unmark_call(item->inst->item->pkgname, item->inst->id, "update,crashed", NO_ALARM);
+ }
if (item->monitor) {
ecore_timer_del(item->monitor);
item->monitor = NULL;
}
- if (s_info.update == item)
- s_info.update = NULL;
+ s_info.update_list = eina_list_remove(s_info.update_list, item);
if (item->deleteme) {
provider_send_deleted(item->inst->item->pkgname, item->inst->id);
{
struct item *item;
- if (over)
+ if (over) {
WarnPrint("Event Q overflow\n");
+ }
item = data;
char *title = NULL;
int ret;
- if (over)
+ if (over) {
WarnPrint("Event Q overflow\n");
+ }
item = data;
static void reset_lb_updated_flag(struct item *item)
{
- if (!item->is_lb_updated)
+ if (!item->is_lb_updated) {
return;
+ }
DbgPrint("[%s] Updated %d times, (content: %s), (title: %s)\n",
item->inst->id, item->is_lb_updated,
struct item *tmp;
EINA_LIST_FOREACH(s_info.pd_open_pending_list, l, tmp) {
- if (tmp != item)
+ if (tmp != item) {
continue;
+ }
s_info.pd_open_pending_list = eina_list_remove_list(s_info.pd_open_pending_list, l);
- if (!s_info.pd_open_pending_list)
+ if (!s_info.pd_open_pending_list) {
deactivate_pd_open_pending_consumer();
+ }
return LB_STATUS_SUCCESS;
}
struct item *tmp;
EINA_LIST_FOREACH(s_info.pending_list, l, tmp) {
- if (tmp != item)
+ if (tmp != item) {
continue;
+ }
s_info.pending_list = eina_list_remove_list(s_info.pending_list, l);
- if (!s_info.pending_list)
+ if (!s_info.pending_list) {
deactivate_pending_consumer();
+ }
return LB_STATUS_SUCCESS;
}
ErrPrint("UPDATE TIMEOUT ========> %s - %s\n", item->inst->item->pkgname, item->inst->id);
- if (s_info.update != item)
+ if (!eina_list_data_find(s_info.update_list, item)) {
ErrPrint("Updating item is not matched\n");
+ }
fault_unmark_call(item->inst->item->pkgname, item->inst->id, "update,crashed", NO_ALARM);
fault_mark_call(item->inst->item->pkgname, item->inst->id, "update,timeout", NO_ALARM, DEFAULT_LIFE_TIMER);
- s_info.update = NULL;
+ s_info.update_list = eina_list_remove(s_info.update_list, item);
exit(ETIME);
return ECORE_CALLBACK_CANCEL;
item = data;
- if (item->monitor) {/*!< If this item is already in update process */
+ if (item->monitor) { /*!< If this item is already in update process */
return ECORE_CALLBACK_RENEW;
}
return ECORE_CALLBACK_RENEW;
}
- if (s_info.update || pd_is_opened(item->inst->item->pkgname) < 0) {
- DbgPrint("%s is busy\n", s_info.update ? s_info.update->inst->id : item->inst->id);
+ /*!
+ * \note
+ * Check the update_list, if you want make serialized update
+ */
+ if (/*s_info.update_list || */pd_is_opened(item->inst->item->pkgname) < 0) {
+ DbgPrint("%s is busy\n", item->inst->id);
(void)append_pending_list(item);
return ECORE_CALLBACK_RENEW;
}
*/
fault_mark_call(item->inst->item->pkgname, item->inst->id, "update,crashed", NO_ALARM, DEFAULT_LIFE_TIMER);
- if (ret & NEED_TO_SCHEDULE)
+ if (ret & NEED_TO_SCHEDULE) {
(void)append_pending_list(item);
+ }
if (ret & OUTPUT_UPDATED) {
/*!
* This should be updated after "update_monitor_cnt" function call,
* because the update_monitor_cnt function will see the s_info.update variable,
*/
- s_info.update = item;
+ s_info.update_list = eina_list_append(s_info.update_list, item);
return ECORE_CALLBACK_RENEW;
}
struct item *item;
EINA_LIST_FOREACH(s_info.item_list, l, item) {
- if (!strcmp(item->inst->id, filename))
+ if (!strcmp(item->inst->id, filename)) {
return item->inst->item->pkgname;
+ }
}
return NULL;
if (so_current_op() != LIVEBOX_OP_UNKNOWN) {
ErrPrint("Current operation: %d\n", so_current_op());
- return LB_STATUS_ERROR_INVALID;
+ /*!
+ * \note
+ * Some case requires to update the content of other box from livebox_XXX ABI.
+ * In that case this function can be used so we have not to filter it from here.
+ * ex) Setting accessibility.
+ * Press the assistive light, turned on, need to update other instances too.
+ * Then the box will use this function from livebox_clicked function.
+ */
}
EINA_LIST_FOREACH(s_info.item_list, l, item) {
char *tmp;
EINA_LIST_FOREACH(s_info.pd_list, l, tmp) {
- if (!strcmp(pkgname, tmp))
+ if (!strcmp(pkgname, tmp)) {
return 0;
+ }
}
tmp = strdup(pkgname);
return LB_STATUS_ERROR_MEMORY;
}
- if (!s_info.pd_list)
+ if (!s_info.pd_list) {
pending_timer_freeze();
+ }
s_info.pd_list = eina_list_append(s_info.pd_list, tmp);
char *tmp;
EINA_LIST_FOREACH_SAFE(s_info.pd_list, l, n, tmp) {
- if (strcmp(tmp, pkgname))
+ if (strcmp(tmp, pkgname)) {
continue;
+ }
s_info.pd_list = eina_list_remove(s_info.pd_list, tmp);
free(tmp);
- if (!s_info.pd_list)
+ if (!s_info.pd_list) {
pending_timer_thaw();
+ }
/*!
* Move all items in pd_open_pending_list
if (!skip_need_to_create) {
ret = so_create_needed(pkgname, cluster, category, abi);
- if (ret != NEED_TO_CREATE)
+ if (ret != NEED_TO_CREATE) {
return LB_STATUS_ERROR_PERMISSION;
+ }
need_to_create = 1;
}
return LB_STATUS_ERROR_FAULT;
}
- if (s_info.paused)
+ if (s_info.paused) {
timer_freeze(item);
+ }
} else {
DbgPrint("Local update timer is disabled: %lf (%d)\n", period, s_info.secured);
item->timer = NULL;
char *tmp;
tmp = strdup(*out_content);
- if (!tmp)
+ if (!tmp) {
ErrPrint("Memory: %s\n", strerror(errno));
+ }
*out_content = tmp;
}
char *tmp;
tmp = strdup(*out_title);
- if (!tmp)
+ if (!tmp) {
ErrPrint("Memory: %s\n", strerror(errno));
+ }
*out_title = tmp;
}
item = eina_list_data_get(l);
s_info.item_list = eina_list_remove_list(s_info.item_list, l);
- if (s_info.update == item)
- s_info.update = NULL;
+ s_info.update_list = eina_list_remove(s_info.update_list, item);
if (item->timer) {
clear_from_pd_open_pending_list(item);
ecore_timer_del(item->timer);
item->timer = NULL;
- if (item->monitor)
+ if (item->monitor) {
item->deleteme = 1;
- else
+ } else {
update_monitor_del(id, item);
+ }
}
if (!item->monitor) {
item = eina_list_data_get(l);
ret = so_resize(inst, w, h);
- if (ret < 0)
+ if (ret < 0) {
return ret;
+ }
if (ret & NEED_TO_SCHEDULE) {
DbgPrint("%s Returns NEED_TO_SCHEDULE\n", pkgname);
(void)append_pending_list(item);
}
- if (ret & OUTPUT_UPDATED)
+ if (ret & OUTPUT_UPDATED) {
update_monitor_cnt(item);
+ }
return LB_STATUS_SUCCESS;
}
return LB_STATUS_ERROR_FAULT;
}
- if (s_info.paused)
+ if (s_info.paused) {
timer_freeze(item);
+ }
}
}
item = eina_list_data_get(l);
ret = so_clicked(inst, event, timestamp, x, y);
- if (ret < 0)
+ if (ret < 0) {
return ret;
+ }
if (ret & NEED_TO_SCHEDULE) {
DbgPrint("%s Returns NEED_TO_SCHEDULE\n", pkgname);
(void)append_pending_list(item);
}
- if (ret & OUTPUT_UPDATED)
+ if (ret & OUTPUT_UPDATED) {
update_monitor_cnt(item);
+ }
return LB_STATUS_SUCCESS;
}
if (!strcmp(emission, "lb,show")) {
item->is_lb_show = 1;
- if (item->is_lb_updated && !is_pended_item(item))
+ if (item->is_lb_updated && !is_pended_item(item)) {
reset_lb_updated_flag(item);
+ }
source = util_uri_to_path(source);
} else if (!strcmp(emission, "lb,hide")) {
}
ret = so_script_event(inst, emission, source, event_info);
- if (ret < 0)
+ if (ret < 0) {
return ret;
+ }
if (ret & NEED_TO_SCHEDULE) {
DbgPrint("%s Returns NEED_TO_SCHEDULE\n", pkgname);
(void)append_pending_list(item);
}
- if (ret & OUTPUT_UPDATED)
+ if (ret & OUTPUT_UPDATED) {
update_monitor_cnt(item);
+ }
return LB_STATUS_SUCCESS;
}
item = eina_list_data_get(l);
ret = so_change_group(inst, cluster, category);
- if (ret < 0)
+ if (ret < 0) {
return ret;
+ }
if (ret & NEED_TO_SCHEDULE) {
DbgPrint("%s Returns NEED_TO_SCHEDULE\n", pkgname);
(void)append_pending_list(item);
}
- if (ret & OUTPUT_UPDATED)
+ if (ret & OUTPUT_UPDATED) {
update_monitor_cnt(item);
+ }
return LB_STATUS_SUCCESS;
}
-static inline int lb_sys_event(struct instance *inst, struct item *item, int event)
+static int lb_sys_event(struct instance *inst, struct item *item, int event)
{
int ret;
ret = so_sys_event(inst, event);
- if (ret < 0)
+ if (ret < 0) {
return ret;
+ }
- if (ret & NEED_TO_SCHEDULE)
+ if (ret & NEED_TO_SCHEDULE) {
(void)append_pending_list(item);
+ }
- if (ret & OUTPUT_UPDATED)
+ if (ret & OUTPUT_UPDATED) {
update_monitor_cnt(item);
+ }
return LB_STATUS_SUCCESS;
}
DbgPrint("Update content for %s\n", pkgname ? pkgname : "(all)");
EINA_LIST_FOREACH_SAFE(s_info.item_list, l, n, item) {
- if (item->deleteme)
+ if (item->deleteme) {
continue;
+ }
- if (cluster && strcasecmp(item->inst->cluster, cluster))
+ if (cluster && strcasecmp(item->inst->cluster, cluster)) {
continue;
+ }
- if (category && strcasecmp(item->inst->category, category))
+ if (category && strcasecmp(item->inst->category, category)) {
continue;
+ }
if (pkgname && strlen(pkgname)) {
if (!strcmp(item->inst->item->pkgname, pkgname)) {
int cnt = 0;
EINA_LIST_FOREACH_SAFE(s_info.item_list, l, n, item) {
- if (!item->deleteme)
+ if (!item->deleteme) {
continue;
+ }
update_monitor_del(item->inst->id, item);
(void)so_destroy(item->inst);
struct item *item;
EINA_LIST_FOREACH_SAFE(s_info.item_list, l, n, item) {
- if (item->deleteme)
+ if (item->deleteme) {
continue;
+ }
DbgPrint("System event for %s (%d)\n", item->inst->id, event);
lb_sys_event(item->inst, item, event);
continue;
}
- if (item->is_paused)
+ if (item->is_paused) {
continue;
+ }
timer_freeze(item);
continue;
}
- if (item->is_paused)
+ if (item->is_paused) {
continue;
+ }
lb_sys_event(item->inst, item, LB_SYS_EVENT_RESUMED);
struct item *item;
inst = so_find_instance(pkgname, id);
- if (!inst)
+ if (!inst) {
return LB_STATUS_ERROR_INVALID;
+ }
l = find_item(inst);
if (!l) {
}
item = eina_list_data_get(l);
- if (!item)
+ if (!item) {
return LB_STATUS_ERROR_FAULT;
+ }
if (item->deleteme) {
DbgPrint("Instance %s will be deleted (%s)\n", item->inst->item->pkgname, item->inst->id);
item->is_paused = 1;
- if (s_info.paused)
+ if (s_info.paused) {
return LB_STATUS_SUCCESS;
+ }
timer_freeze(item);
int ret;
inst = so_find_instance(pkgname, id);
- if (!inst)
+ if (!inst) {
return LB_STATUS_ERROR_INVALID;
+ }
l = find_item(inst);
if (!l) {
}
item = eina_list_data_get(l);
- if (!item)
+ if (!item) {
return LB_STATUS_ERROR_FAULT;
+ }
if (item->deleteme) {
DbgPrint("Instance %s will be deleted (%s)\n", item->inst->item->pkgname, item->inst->id);
item->is_paused = 0;
- if (s_info.paused)
+ if (s_info.paused) {
return LB_STATUS_SUCCESS;
+ }
lb_sys_event(inst, item, LB_SYS_EVENT_RESUMED);