GHashTable *widget_table;
GHashTable *instance_cnt_table;
GList *restart_list;
+ char *restarting_instance_id;
int restart_timer;
} s_info = {
.w = 0,
.widget_table = NULL,
.instance_cnt_table = NULL,
.restart_list = NULL,
+ .restarting_instance_id = NULL,
.restart_timer = 0
};
static bool __is_delayed_resuming_mode;
static void __destroy_widget_info(gpointer data);
static gboolean __restart_timeout_cb(gpointer user_data);
+static int __find_restart_info(gconstpointer a, gconstpointer b);
static void __remove_restart_info(const char *instance_id);
static void __restart_instance(void);
static void __remove_restart_timer(void);
static void __add_restart_list(const char *instance_id)
{
+ GList *list;
char *restart_instance_id;
if (!instance_id) {
return;/* LCOV_EXCL_LINE */
}
+ list = g_list_find_custom(s_info.restart_list, instance_id, __find_restart_info);
+ if (list != NULL) {
+ LOGW("already in restart list(%s)", instance_id);
+ return;
+ }
+
restart_instance_id = strdup(instance_id);
if (restart_instance_id == NULL) {
LOGE("Out Of Memory");
if (info->restart || (info->instance_id == NULL) || (strcmp(info->instance_id, instance_id) != 0)) {
LOGE("Wrong added info, %s %s", appid, info->widget_id);/* LCOV_EXCL_LINE */
+
+ if (s_info.restarting_instance_id && info->instance_id &&
+ strcmp(s_info.restarting_instance_id, info->instance_id) == 0) {
+ __remove_restart_timer();
+ __restart_instance();
+ }
+
return;/* LCOV_EXCL_LINE */
}
info->state = WIDGET_STATE_ATTACHED;
- __remove_restart_info(instance_id);
- __remove_restart_timer();
- __restart_instance();
+ if (s_info.restarting_instance_id &&
+ strcmp(s_info.restarting_instance_id, instance_id) == 0) {
+ __remove_restart_info(instance_id);
+ __remove_restart_timer();
+ __restart_instance();
+ }
__flush_event_queue(info);
/**
* @note
struct widget_info *info;
char *restart_instance_id;
int w, h;
+ int ret;
screen_connector_toolkit_evas_ops ops;
if (s_info.restart_list == NULL) {
+ s_info.restarting_instance_id = NULL;
+ s_info.restart_timer = 0;
LOGW("null restart list");
return;
}
SCREEN_CONNECTOR_SCREEN_TYPE_WIDGET,
info);
+ ret = widget_instance_terminate(info->instance_id);
+ if (ret != 0)
+ LOGW("widget_instance_terminate failed: %d", ret);
+
info->pid = widget_instance_launch(info->instance_id, info->content_info, w, h);
info->restart = false;
+ s_info.restarting_instance_id = restart_instance_id;
s_info.restart_timer = g_timeout_add(WIDGET_RESTART_TIMEOUT,
__restart_timeout_cb, restart_instance_id);