#define ERR_BUFFER_SIZE 1024
#define WIDGET_PRIVILEGE "http://tizen.org/privilege/widget.viewer"
-#define WIDGET_LAUNCH_TIMEOUT 5000
+#define WIDGET_LAUNCH_TIMEOUT 7000
+#define MAX_NO_RESPONSE_COUNT 2
/*!
* \note
GQueue *pending_queue;
bool is_faulted;
screen_connector_toolkit_evas_h toolkit_h;
+ int no_response_count;
};
static void __flush_event_queue(struct widget_info *info);
elm_object_signal_emit(info->layout, "disable", "overlay,text");
info->state = WIDGET_STATE_ATTACHED;
+ info->no_response_count = 0;
if (s_info.launching_instance_id &&
strcmp(s_info.launching_instance_id, instance_id) == 0) {
__remove_launch_info(instance_id);
}
/* LCOV_EXCL_STOP */
+/* LCOV_EXCL_START */
+static void __display_loading_text(struct widget_info *info)
+{
+ if (!info->disable_preview) {
+ __create_preview_image(info->layout, info->widget_id);
+ elm_object_signal_emit(info->layout, "enable", "preview");
+ }
+
+ if (!info->disable_loading) {
+ elm_object_part_text_set(info->layout, "text", T_("IDS_ST_POP_LOADING_ING"));
+ elm_object_signal_emit(info->layout, "enable", "text");
+ }
+}
+/* LCOV_EXCL_STOP */
+
static void __push_event_queue(struct widget_info *info, int event)
{
if (info->event_queue == NULL)
instance_id = s_info.launch_list->data;
info = g_hash_table_lookup(s_info.widget_table, instance_id);
+ if (info == NULL) {
+ LOGW("can not find instance (%s)", instance_id);
+ return;
+ }
evas_object_geometry_get(info->layout, NULL, NULL, &w, &h);
LOGD("Widget launch %s, %d, %d", info->instance_id, w, h);
LOGW("widget_instance_terminate failed: %d", ret);
}
+ __display_loading_text(info);
info->pid = widget_instance_launch(info->instance_id, info->content_info, w, h);
info->restart = false;
if (info->pid < 0) {
return 0;
}
+ if (widget_instance_info->no_response_count >= MAX_NO_RESPONSE_COUNT) {
+ LOGE("WIDGET IS NOT RESPONDING(%s) STOP AUTO RESTART", widget_id);
+ widget_instance_info->no_response_count = 0;
+ return 0;
+ }
+
g_hash_table_iter_init(&iter, s_info.widget_table);
while (g_hash_table_iter_next(&iter, &key, &value)) {
widget_instance_info = (struct widget_info *)value;
static gboolean __launch_timeout_cb(gpointer user_data)
{
char *instance_id = (char *)user_data;
+ struct widget_info *info;
LOGW("Timeout called !! %s", instance_id);
+ info = g_hash_table_lookup(s_info.widget_table, instance_id);
+ if (!info)
+ LOGE("Unable to find a proper instance");/* LCOV_EXCL_LINE */
+
__remove_launch_info(instance_id);
+ if (info && info->no_response_count < MAX_NO_RESPONSE_COUNT) {
+ info->no_response_count++;
+ LOGW("Widget is not responding(%d) !! %s(%d)",
+ info->no_response_count, instance_id, info->pid);
+ aul_terminate_pid(info->pid);
+ }
__launch_instance();
return G_SOURCE_REMOVE;
}
* @note
* Create a new instance in this case.
*/
- if (!info->disable_preview)
- __create_preview_image(layout, info->widget_id);
-
- if (!info->disable_loading)
- elm_object_part_text_set(layout, "text", T_("IDS_ST_POP_LOADING_ING"));
-
+ __display_loading_text(info);
__add_launch_list(info->instance_id);
if (s_info.launch_timer == 0)
__launch_instance();
if (info->pid < 0) {
info->restart = true;
LOGD("restart! %s", info->widget_id);
- if (!info->disable_preview) {
- __create_preview_image(info->layout, info->widget_id);
- elm_object_signal_emit(info->layout, "enable", "preview");
- }
-
- if (!info->disable_loading) {
- elm_object_part_text_set(info->layout, "text", T_("IDS_ST_POP_LOADING_ING"));
- elm_object_signal_emit(info->layout, "enable", "text");
- }
-
+ __display_loading_text(info);
__restart_terminated_widget(info->widget_id);
}
}
info->state = WIDGET_STATE_DETACHED;
info->event_queue = NULL;
info->restart = false;
+ info->no_response_count = 0;
return info;
__FUNCTION__, __LINE__, info->instance_id, info->pid);
if (info->pid < 0) {
evas_object_geometry_get(info->layout, NULL, NULL, &w, &h);
- if (!info->disable_preview) {
- __create_preview_image(info->layout, info->widget_id);
- elm_object_signal_emit(info->layout, "enable", "preview");
- }
-
- if (!info->disable_loading) {
- elm_object_part_text_set(info->layout, "text", T_("IDS_ST_POP_LOADING_ING"));
- elm_object_signal_emit(info->layout, "enable", "text");
- }
+ __display_loading_text(info);
__add_launch_list(info->instance_id);
__launch_instance();
} else {