#define WIDGET_PRIVILEGE "http://tizen.org/privilege/widget.viewer"
#define WIDGET_LAUNCH_TIMEOUT 7000
-#define MAX_NO_RESPONSE_COUNT 2
+#define MAX_NO_RESPONSE_COUNT 5
/*!
* \note
}
}
+static int __clear_launch_waiting(char *instance_id)
+{
+ struct widget_info *info;
+ int ret;
+
+ LOGW("Clear launch waiting !! %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) {
+ ret = aul_terminate_pid(info->pid);
+ if (ret != AUL_R_OK) {
+ LOGW("Fail to term widget(%d) pid(%d) !!",
+ ret, info->pid);
+ return 0;
+ }
+ info->no_response_count++;
+ LOGW("Widget is not responding(%d) !! %s(%d)",
+ info->no_response_count, instance_id, info->pid);
+ }
+ return 0;
+}
+
/* LCOV_EXCL_START */
static int __restart_terminated_widget(const char *widget_id)
{
gpointer key, value;
struct widget_info *widget_instance_info;
int target_pid = 0;
+ char *instance_id;
+ int pid;
+ char *id;
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;
- if (strcmp(widget_instance_info->widget_id, widget_id) == 0) {
- if (widget_instance_info->restart) {
- target_pid = widget_instance_info->pid;
- LOGW("Prepare restart (%s)(%d)", widget_id, target_pid);
- break;
- } else {
- LOGW("There is no restart event for (%s)",
- widget_instance_info->instance_id);
- }
+ if (strcmp(widget_instance_info->widget_id, widget_id) != 0)
+ continue;
+ if (widget_instance_info->restart) {
+ target_pid = widget_instance_info->pid;
+ LOGW("Prepare restart (%s)(%d)", widget_id, target_pid);
+ break;
+ } else {
+ LOGW("There is no restart event for (%s)",
+ widget_instance_info->instance_id);
}
}
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;
+ aul_widget_write_log(LOG_TAG, "[%s:%d] not responding (%s)",
+ __FUNCTION__, __LINE__, widget_id);
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;
- if (widget_instance_info->restart &&
- widget_instance_info->pid == target_pid &&
- (strcmp(widget_instance_info->widget_id, widget_id) == 0)) {
- __add_launch_list(widget_instance_info->instance_id);
+ pid = widget_instance_info->pid;
+ instance_id = widget_instance_info->instance_id;
+ id = widget_instance_info->widget_id;
+ if (!(widget_instance_info->restart && pid == target_pid &&
+ (strcmp(id, widget_id) == 0)))
+ continue;
+ if (s_info.launching_instance_id &&
+ strcmp(s_info.launching_instance_id, instance_id) == 0) {
+ __remove_launch_timer();
+ __clear_launch_waiting(instance_id);
}
+ __add_launch_list(instance_id);
}
if (s_info.launch_timer == 0)
__launch_instance();
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);
- }
+ __clear_launch_waiting(instance_id);
__launch_instance();
return G_SOURCE_REMOVE;
}