[Spice-devel] [vdagent-linux v2 6/6] console-kit: include handler for dbus match
Victor Toso
victortoso at redhat.com
Thu Apr 28 11:38:44 UTC 2016
On Wed, Apr 27, 2016 at 03:54:16PM -0500, Jonathon Jongsma wrote:
> 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.
>
Agreed!
> > + }
> > +}
> > +
> > +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