From c415479a5518c93956213d4260b5c412e3927f2f Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 23 Jul 2008 16:50:48 +0200 Subject: allow module-x11-xsmp to be loaded more than once --- src/modules/module-x11-xsmp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/modules') diff --git a/src/modules/module-x11-xsmp.c b/src/modules/module-x11-xsmp.c index 696826d8..0b2e375a 100644 --- a/src/modules/module-x11-xsmp.c +++ b/src/modules/module-x11-xsmp.c @@ -47,7 +47,7 @@ PA_MODULE_AUTHOR("Lennart Poettering"); PA_MODULE_DESCRIPTION("X11 session management"); PA_MODULE_VERSION(PACKAGE_VERSION); -PA_MODULE_LOAD_ONCE(TRUE); +PA_MODULE_LOAD_ONCE(FALSE); PA_MODULE_USAGE("session_manager= display="); static pa_bool_t ice_in_use = FALSE; -- cgit From 32e93d5c898e63007da3d9adcbab0cfd70f99a09 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 23 Jul 2008 16:59:55 +0200 Subject: follow consolekit's recent D-Bus API change, original patch from William Jon McCan --- src/modules/module-console-kit.c | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) (limited to 'src/modules') diff --git a/src/modules/module-console-kit.c b/src/modules/module-console-kit.c index 3adee99e..5a3975fb 100644 --- a/src/modules/module-console-kit.c +++ b/src/modules/module-console-kit.c @@ -71,7 +71,7 @@ struct userdata { static void add_session(struct userdata *u, const char *id) { DBusError error; DBusMessage *m = NULL, *reply = NULL; - int32_t uid; + uint32_t uid; struct session *session; char *t; @@ -92,10 +92,12 @@ static void add_session(struct userdata *u, const char *id) { goto fail; } - /* FIXME: Why is this in int32? and not an uint32? */ - if (!dbus_message_get_args(reply, &error, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID)) { - pa_log("Failed to parse GetUnixUser() result: %s: %s", error.name, error.message); - goto fail; + /* CK 0.3 this changed from int32 to uint32 */ + if (!dbus_message_get_args(reply, &error, DBUS_TYPE_UINT32, &uid, DBUS_TYPE_INVALID)) { + if (!dbus_message_get_args(reply, &error, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID)) { + pa_log("Failed to parse GetUnixUser() result: %s: %s", error.name, error.message); + goto fail; + } } /* We only care about our own sessions */ @@ -163,18 +165,24 @@ static DBusHandlerResult filter_cb(DBusConnection *bus, DBusMessage *message, vo if (dbus_message_is_signal(message, "org.freedesktop.ConsoleKit.Seat", "SessionAdded")) { - if (!dbus_message_get_args(message, &error, DBUS_TYPE_STRING, &path, DBUS_TYPE_INVALID) || dbus_error_is_set(&error)) { - pa_log_error("Failed to parse SessionAdded message: %s: %s", error.name, error.message); - goto finish; + /* CK API changed to match spec in 0.3 */ + if (!dbus_message_get_args(message, &error, DBUS_TYPE_OBJECT_PATH, &path, DBUS_TYPE_INVALID)) { + if (!dbus_message_get_args(message, &error, DBUS_TYPE_STRING, &path, DBUS_TYPE_INVALID)) { + pa_log_error("Failed to parse SessionAdded message: %s: %s", error.name, error.message); + goto finish; + } } add_session(u, path); } else if (dbus_message_is_signal(message, "org.freedesktop.ConsoleKit.Seat", "SessionRemoved")) { - if (!dbus_message_get_args(message, &error, DBUS_TYPE_STRING, &path, DBUS_TYPE_INVALID) || dbus_error_is_set(&error)) { - pa_log_error("Failed to parse SessionRemoved message: %s: %s", error.name, error.message); - goto finish; + /* CK API changed to match spec in 0.3 */ + if (!dbus_message_get_args(message, &error, DBUS_TYPE_OBJECT_PATH, &path, DBUS_TYPE_INVALID)) { + if (!dbus_message_get_args(message, &error, DBUS_TYPE_STRING, &path, DBUS_TYPE_INVALID)) { + pa_log_error("Failed to parse SessionRemoved message: %s: %s", error.name, error.message); + goto finish; + } } remove_session(u, path); -- cgit From 888256b0be254f20e291ffdec8b109fb0ada4dd0 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 24 Jul 2008 01:31:33 +0200 Subject: reset dbus error struct before retrying parsing messages --- src/modules/module-console-kit.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src/modules') diff --git a/src/modules/module-console-kit.c b/src/modules/module-console-kit.c index 5a3975fb..829b43b1 100644 --- a/src/modules/module-console-kit.c +++ b/src/modules/module-console-kit.c @@ -94,6 +94,8 @@ static void add_session(struct userdata *u, const char *id) { /* CK 0.3 this changed from int32 to uint32 */ if (!dbus_message_get_args(reply, &error, DBUS_TYPE_UINT32, &uid, DBUS_TYPE_INVALID)) { + dbus_error_free(&error); + if (!dbus_message_get_args(reply, &error, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID)) { pa_log("Failed to parse GetUnixUser() result: %s: %s", error.name, error.message); goto fail; @@ -167,6 +169,8 @@ static DBusHandlerResult filter_cb(DBusConnection *bus, DBusMessage *message, vo /* CK API changed to match spec in 0.3 */ if (!dbus_message_get_args(message, &error, DBUS_TYPE_OBJECT_PATH, &path, DBUS_TYPE_INVALID)) { + dbus_error_free(&error); + if (!dbus_message_get_args(message, &error, DBUS_TYPE_STRING, &path, DBUS_TYPE_INVALID)) { pa_log_error("Failed to parse SessionAdded message: %s: %s", error.name, error.message); goto finish; @@ -179,6 +183,8 @@ static DBusHandlerResult filter_cb(DBusConnection *bus, DBusMessage *message, vo /* CK API changed to match spec in 0.3 */ if (!dbus_message_get_args(message, &error, DBUS_TYPE_OBJECT_PATH, &path, DBUS_TYPE_INVALID)) { + dbus_error_free(&error); + if (!dbus_message_get_args(message, &error, DBUS_TYPE_STRING, &path, DBUS_TYPE_INVALID)) { pa_log_error("Failed to parse SessionRemoved message: %s: %s", error.name, error.message); goto finish; -- cgit From 49f09d6d0eadd67d75190a9001fe715dc486cd36 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 24 Jul 2008 02:21:58 +0200 Subject: fix destruction of dbus modules: make sure we don't leave filter function registered after unreffing the dbus connection --- src/modules/module-bt-proximity.c | 1 - src/modules/module-console-kit.c | 11 ++++++++++- src/modules/module-hal-detect.c | 14 +++++++++++++- 3 files changed, 23 insertions(+), 3 deletions(-) (limited to 'src/modules') diff --git a/src/modules/module-bt-proximity.c b/src/modules/module-bt-proximity.c index 77b95868..f924c3cb 100644 --- a/src/modules/module-bt-proximity.c +++ b/src/modules/module-bt-proximity.c @@ -358,7 +358,6 @@ static int add_matches(struct userdata *u, pa_bool_t add) { } else dbus_bus_remove_match(pa_dbus_connection_get(u->dbus_connection), filter2, &e); - if (add) pa_assert_se(dbus_connection_add_filter(pa_dbus_connection_get(u->dbus_connection), filter_func, u, NULL)); else diff --git a/src/modules/module-console-kit.c b/src/modules/module-console-kit.c index 829b43b1..3578212e 100644 --- a/src/modules/module-console-kit.c +++ b/src/modules/module-console-kit.c @@ -341,8 +341,17 @@ void pa__done(pa_module *m) { pa_hashmap_free(u->sessions, NULL, NULL); } - if (u->connection) + if (u->connection) { + DBusError error; + dbus_error_init(&error); + + dbus_bus_remove_match(pa_dbus_connection_get(u->connection), "type='signal',sender='org.freedesktop.ConsoleKit', interface='org.freedesktop.ConsoleKit.Seat'", &error); + dbus_error_free(&error); + + dbus_connection_remove_filter(pa_dbus_connection_get(u->connection), filter_cb, u); + pa_dbus_connection_unref(u->connection); + } pa_xfree(u); } diff --git a/src/modules/module-hal-detect.c b/src/modules/module-hal-detect.c index 19430a3d..ec064961 100644 --- a/src/modules/module-hal-detect.c +++ b/src/modules/module-hal-detect.c @@ -842,8 +842,20 @@ void pa__done(pa_module *m) { if (u->devices) pa_hashmap_free(u->devices, hal_device_free_cb, NULL); - if (u->connection) + if (u->connection) { + DBusError error; + dbus_error_init(&error); + + dbus_bus_remove_match(pa_dbus_connection_get(u->connection), "type='signal',sender='org.freedesktop.Hal', interface='org.freedesktop.Hal.Device.AccessControl'", &error); + dbus_error_free(&error); + + dbus_bus_remove_match(pa_dbus_connection_get(u->connection), "type='signal',interface='org.pulseaudio.Server'", &error); + dbus_error_free(&error); + + dbus_connection_remove_filter(pa_dbus_connection_get(u->connection), filter_cb, u); + pa_dbus_connection_unref(u->connection); + } pa_xfree(u); } -- cgit From e3fb086681bf743310f2af19bf9a01957fd34782 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 24 Jul 2008 03:02:09 +0200 Subject: make module-hal and module-ck live together in peace --- src/modules/module-console-kit.c | 4 +++- src/modules/module-hal-detect.c | 6 +++++- 2 files changed, 8 insertions(+), 2 deletions(-) (limited to 'src/modules') diff --git a/src/modules/module-console-kit.c b/src/modules/module-console-kit.c index 3578212e..e1933c28 100644 --- a/src/modules/module-console-kit.c +++ b/src/modules/module-console-kit.c @@ -178,6 +178,7 @@ static DBusHandlerResult filter_cb(DBusConnection *bus, DBusMessage *message, vo } add_session(u, path); + return DBUS_HANDLER_RESULT_HANDLED; } else if (dbus_message_is_signal(message, "org.freedesktop.ConsoleKit.Seat", "SessionRemoved")) { @@ -192,12 +193,13 @@ static DBusHandlerResult filter_cb(DBusConnection *bus, DBusMessage *message, vo } remove_session(u, path); + return DBUS_HANDLER_RESULT_HANDLED; } finish: dbus_error_free(&error); - return DBUS_HANDLER_RESULT_HANDLED; + return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; } static int get_session_list(struct userdata *u) { diff --git a/src/modules/module-hal-detect.c b/src/modules/module-hal-detect.c index ec064961..ab5b206f 100644 --- a/src/modules/module-hal-detect.c +++ b/src/modules/module-hal-detect.c @@ -615,6 +615,8 @@ static DBusHandlerResult filter_cb(DBusConnection *bus, DBusMessage *message, vo device_added_cb(u->context, udi); } + return DBUS_HANDLER_RESULT_HANDLED; + } else if (dbus_message_is_signal(message, "org.pulseaudio.Server", "DirtyGiveUpMessage")) { /* We use this message to avoid a dirty race condition when we get an ACLAdded message before the previously owning PA @@ -661,12 +663,14 @@ static DBusHandlerResult filter_cb(DBusConnection *bus, DBusMessage *message, vo } else /* Yes, we don't check the UDI for validity, but hopefully HAL will */ device_added_cb(u->context, udi); + + return DBUS_HANDLER_RESULT_HANDLED; } finish: dbus_error_free(&error); - return DBUS_HANDLER_RESULT_HANDLED; + return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; } static void hal_context_free(LibHalContext* hal_context) { -- cgit