From 7a5ba755e957d3211036ab6f128ef38a898a870d Mon Sep 17 00:00:00 2001 From: Nedko Arnaudov Date: Fri, 3 Sep 2010 01:49:11 +0300 Subject: [PATCH] Add app list version number to the AppStateChanged signal and check it --- daemon/app_supervisor.c | 6 +++++- proxies/app_supervisor_proxy.c | 12 +++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/daemon/app_supervisor.c b/daemon/app_supervisor.c index f998aacc..8a8eb3b3 100644 --- a/daemon/app_supervisor.c +++ b/daemon/app_supervisor.c @@ -157,12 +157,15 @@ void emit_app_state_changed(struct ladish_app_supervisor * supervisor_ptr, struc running = app_ptr->pid != 0; terminal = app_ptr->terminal; + supervisor_ptr->version++; + dbus_signal_emit( g_dbus_connection, supervisor_ptr->opath, IFACE_APP_SUPERVISOR, "AppStateChanged", - "tsbby", + "ttsbby", + &supervisor_ptr->version, &app_ptr->id, &app_ptr->name, &running, @@ -1078,6 +1081,7 @@ SIGNAL_ARGS_BEGIN(AppRemoved, "") SIGNAL_ARGS_END SIGNAL_ARGS_BEGIN(AppStateChanged, "") + SIGNAL_ARG_DESCRIBE("new_list_version", DBUS_TYPE_UINT64_AS_STRING, "") SIGNAL_ARG_DESCRIBE("id", DBUS_TYPE_UINT64_AS_STRING, "") SIGNAL_ARG_DESCRIBE("name", DBUS_TYPE_STRING_AS_STRING, "") SIGNAL_ARG_DESCRIBE("running", DBUS_TYPE_BOOLEAN_AS_STRING, "") diff --git a/proxies/app_supervisor_proxy.c b/proxies/app_supervisor_proxy.c index bed190ad..6eeb680f 100644 --- a/proxies/app_supervisor_proxy.c +++ b/proxies/app_supervisor_proxy.c @@ -108,6 +108,7 @@ static void on_app_removed(void * context, DBusMessage * message_ptr) static void on_app_state_changed(void * context, DBusMessage * message_ptr) { + uint64_t new_list_version; uint64_t id; const char * name; dbus_bool_t running; @@ -117,6 +118,7 @@ static void on_app_state_changed(void * context, DBusMessage * message_ptr) if (!dbus_message_get_args( message_ptr, &g_dbus_error, + DBUS_TYPE_UINT64, &new_list_version, DBUS_TYPE_UINT64, &id, DBUS_TYPE_STRING, &name, DBUS_TYPE_BOOLEAN, &running, @@ -130,7 +132,15 @@ static void on_app_state_changed(void * context, DBusMessage * message_ptr) } //log_info("AppStateChanged signal received"); - proxy_ptr->app_state_changed(proxy_ptr->context, id, name, running, terminal, level); + //log_info("AppRemoved signal received, id=%"PRIu64, id); + if (new_list_version <= proxy_ptr->version) + { + log_info("Ignoring signal for older version of the app list"); + } + else + { + proxy_ptr->app_state_changed(proxy_ptr->context, id, name, running, terminal, level); + } } #undef proxy_ptr