]> code.delx.au - pulseaudio/blobdiff - src/modules/module-console-kit.c
dbus: remove filter functions only if they were actually set before
[pulseaudio] / src / modules / module-console-kit.c
index 103f5c48dcdd5d02deb640cd7bc3720325ae9afd..875852f35ab2d23f69db5e8f2e3f7935c097103e 100644 (file)
@@ -67,6 +67,7 @@ struct userdata {
     pa_core *core;
     pa_dbus_connection *connection;
     pa_hashmap *sessions;
+    pa_bool_t filter_added;
 };
 
 static void add_session(struct userdata *u, const char *id) {
@@ -300,7 +301,7 @@ int pa__init(pa_module*m) {
         goto fail;
     }
 
-    m->userdata = u = pa_xnew(struct userdata, 1);
+    m->userdata = u = pa_xnew0(struct userdata, 1);
     u->core = m->core;
     u->module = m;
     u->connection = connection;
@@ -311,6 +312,8 @@ int pa__init(pa_module*m) {
         goto fail;
     }
 
+    u->filter_added = TRUE;
+
     if (pa_dbus_add_matches(
                 pa_dbus_connection_get(connection), &error,
                 "type='signal',sender='org.freedesktop.ConsoleKit',interface='org.freedesktop.ConsoleKit.Seat',member='SessionAdded'",
@@ -359,7 +362,9 @@ void pa__done(pa_module *m) {
                 "type='signal',sender='org.freedesktop.ConsoleKit',interface='org.freedesktop.ConsoleKit.Seat',member='SessionAdded'",
                 "type='signal',sender='org.freedesktop.ConsoleKit',interface='org.freedesktop.ConsoleKit.Seat',member='SessionRemoved'", NULL);
 
-        dbus_connection_remove_filter(pa_dbus_connection_get(u->connection), filter_cb, u);
+        if (u->filter_added)
+            dbus_connection_remove_filter(pa_dbus_connection_get(u->connection), filter_cb, u);
+
         pa_dbus_connection_unref(u->connection);
     }