From: Paweł Stawicki Date: Thu, 16 Mar 2017 13:09:32 +0000 (+0100) Subject: add screen-reader dead tracker to at-spi-bus-launcher X-Git-Tag: accepted/tizen/unified/20170519.200903^0 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fupstream%2Fat-spi2-core.git;a=commitdiff_plain;h=67b77c5a624ccab97c840e689fed4dfcb46e0aa1 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 --- 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)