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@xxxxxxxxxx> _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel