[Spice-devel] [vdagent-linux v2 6/6] console-kit: include handler for dbus match

Jonathon Jongsma jjongsma at redhat.com
Wed Apr 27 20:54:16 UTC 2016


On Sat, 2016-04-23 at 12:27 +0200, Victor Toso wrote:
> At the moment we request to read signals on ConsoleKit.Seat interface but
> later
> on we will request to read signals on different interface so moving this to
> its
> own function helps.
> ---
>  src/console-kit.c | 65 +++++++++++++++++++++++++++++++++++++++++++-----------
> -
>  1 file changed, 51 insertions(+), 14 deletions(-)
> 
> diff --git a/src/console-kit.c b/src/console-kit.c
> index 41a1cfe..f3c4aa3 100644
> --- a/src/console-kit.c
> +++ b/src/console-kit.c
> @@ -34,6 +34,7 @@ struct session_info {
>      char *seat;
>      char *active_session;
>      int verbose;
> +    gchar *match_seat_signals;
>  };
>  
>  #define INTERFACE_CONSOLE_KIT "org.freedesktop.ConsoleKit"
> @@ -49,6 +50,54 @@ struct session_info {
>  static char *console_kit_get_first_seat(struct session_info *si);
>  static char *console_kit_check_active_session_change(struct session_info
> *si);
>  
> +static void si_dbus_match_remove(struct session_info *si)
> +{
> +    DBusError error;
> +    if (si->match_seat_signals != NULL) {
> +        dbus_error_init(&error);
> +        dbus_bus_remove_match(si->connection,
> +                              si->match_seat_signals,
> +                              &error);
> +        if (si->verbose)
> +            syslog(LOG_DEBUG, "(console-kit) seat match removed: %s",
> +                   si->match_seat_signals);
> +        g_free(si->match_seat_signals);

Since we're using the NULL-ness of si->match_seat_signals to make decisions (see
above), we should probably set it to NULL after we free it.

> +    }
> +}
> +
> +static void si_dbus_match_rule_update(struct session_info *si)
> +{
> +    DBusError error;
> +
> +    if (si->connection == NULL)
> +        return;
> +
> +    si_dbus_match_remove(si);
> +
> +    /* Seat signals */
> +    if (si->seat != NULL) {
> +        si->match_seat_signals =
> +            g_strdup_printf ("type='signal',interface='%s',path='%s',"
> +                             "member='ActiveSessionChanged'",
> +                             INTERFACE_CK_SEAT,
> +                             si->seat);
> +        if (si->verbose)
> +            syslog(LOG_DEBUG, "(console-kit) seat match: %s",
> +                   si->match_seat_signals);
> +
> +        dbus_error_init(&error);
> +        dbus_bus_add_match(si->connection,
> +                           si->match_seat_signals,
> +                           &error);
> +        if (dbus_error_is_set(&error)) {
> +            syslog(LOG_WARNING, "Unable to add dbus rule match: %s",
> +                   error.message);
> +            dbus_error_free(&error);
> +            g_free(si->match_seat_signals);
> +        }
> +    }
> +}
> +
>  static void
>  si_dbus_read_signals(struct session_info *si)
>  {
> @@ -106,7 +155,6 @@ struct session_info *session_info_create(int verbose)
>  {
>      struct session_info *si;
>      DBusError error;
> -    char match[1024];
>  
>      si = calloc(1, sizeof(*si));
>      if (!si)
> @@ -138,19 +186,7 @@ struct session_info *session_info_create(int verbose)
>          return NULL;
>      }
>  
> -    /* Register for active session changes */
> -    snprintf(match, sizeof(match),
> -             "type='signal',interface='%s',"
> -             "path='%s',member='ActiveSessionChanged'",
> -             INTERFACE_CK_SEAT, si->seat);
> -    dbus_error_init(&error);
> -    dbus_bus_add_match(si->connection, match, &error);
> -    if (dbus_error_is_set(&error)) {
> -        syslog(LOG_ERR, "Match Error (%s)", error.message);
> -        session_info_destroy(si);
> -        return NULL;
> -    }
> -
> +    si_dbus_match_rule_update(si);
>      return si;
>  }
>  
> @@ -159,6 +195,7 @@ void session_info_destroy(struct session_info *si)
>      if (!si)
>          return;
>  
> +    si_dbus_match_remove(si);
>      dbus_connection_close(si->connection);
>      free(si->seat);
>      free(si->active_session);

Otherwise looks OK to me

Acked-by: Jonathon Jongsma <jjongsma at redhat.com>


More information about the Spice-devel mailing list