From 67b77c5a624ccab97c840e689fed4dfcb46e0aa1 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Pawe=C5=82=20Stawicki?=
Date: Thu, 16 Mar 2017 14:09:32 +0100
Subject: [PATCH] add screen-reader dead tracker to at-spi-bus-launcher
Commit adds _screen_reader_dead_tracker method to track if screen-reader
gets killed.
Commit needs: https://review.tizen.org/gerrit/#/c/117565/
replaces: https://review.tizen.org/gerrit/#/c/117557/
invalidates: https://review.tizen.org/gerrit/#/c/117556/
Change-Id: I8ea33c75f4e2fa4c0d868deec52a574c993a21b0
---
bus/at-spi-bus-launcher.c | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/bus/at-spi-bus-launcher.c b/bus/at-spi-bus-launcher.c
index 89860b6..87b2da7 100644
--- a/bus/at-spi-bus-launcher.c
+++ b/bus/at-spi-bus-launcher.c
@@ -64,6 +64,7 @@ FILE *log_file;
#define LOGD(arg...) do {if (log_file) {fprintf(log_file, ##arg);fprintf(log_file, "\n"); fflush(log_file);}} while(0)
#endif
+static gboolean _launch_screen_reader_repeat_until_success(gpointer user_data);
typedef enum {
A11Y_BUS_STATE_IDLE = 0,
@@ -329,6 +330,8 @@ handle_a11y_enabled_change (A11yBusLauncher *app, gboolean enabled,
&builder,
&invalidated_builder),
NULL);
+ g_variant_builder_clear (&builder);
+ g_variant_builder_clear (&invalidated_builder);
}
static void
@@ -367,6 +370,8 @@ handle_screen_reader_enabled_change (A11yBusLauncher *app, gboolean enabled,
&builder,
&invalidated_builder),
NULL);
+ g_variant_builder_clear (&builder);
+ g_variant_builder_clear (&invalidated_builder);
}
static gboolean
@@ -603,6 +608,20 @@ gsettings_key_changed (GSettings *gsettings, const gchar *key, void *user_data)
handle_screen_reader_enabled_change (_global_app, new_val, FALSE);
}
+static int
+_screen_reader_dead_tracker (int pid, void *data)
+{
+ A11yBusLauncher *app = data;
+
+ if (app->pid > 0 && pid == app->pid)
+ {
+ LOGE("screen reader is dead, pid: %d, restarting", pid);
+ app->pid = 0;
+ g_timeout_add_seconds (2, _launch_screen_reader_repeat_until_success, app);
+ }
+ return 0;
+}
+
static gboolean
_launch_screen_reader(gpointer user_data, gboolean by_vconf_change)
{
@@ -636,6 +655,8 @@ _launch_screen_reader(gpointer user_data, gboolean by_vconf_change)
if (bl->pid > 0)
{
LOGD("Screen reader launched with pid: %i", bl->pid);
+ LOGD("registering screen reader dead tracker");
+ aul_listen_app_dead_signal(_screen_reader_dead_tracker, bl);
ret = TRUE;
}
else
@@ -680,6 +701,9 @@ _terminate_screen_reader(A11yBusLauncher *bl)
return FALSE;
+ LOGD("unregistering screen reader dead tracker");
+ aul_listen_app_dead_signal(NULL, NULL);
+
int status = aul_app_get_status_bypid(bl->pid);
if (status < 0)
--
2.7.4