summaryrefslogtreecommitdiff
path: root/src/modules/dbus
diff options
context:
space:
mode:
authorDavid Emett <dave@sp4m.net>2019-07-27 22:24:42 +0100
committerArun Raghavan <arun@arunraghavan.net>2019-08-27 08:51:27 +0530
commitb76f668253d24e5dd1b1bf865325e094ac6f05e9 (patch)
tree9c956535fcc640644a9134dfb5bb9f4729d97e22 /src/modules/dbus
parentbdf66c4693c8775dc3c4a403cbae77a56d4b1e29 (diff)
downloadpulseaudio-b76f668253d24e5dd1b1bf865325e094ac6f05e9.tar.gz
dbus: fix ActiveProfile setting
Just like with handle_set_active_port, we need to look up the profile corresponding to the provided path rather than doing a name comparison. Fixes: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/issues/709
Diffstat (limited to 'src/modules/dbus')
-rw-r--r--src/modules/dbus/iface-card.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/modules/dbus/iface-card.c b/src/modules/dbus/iface-card.c
index 520325065..32e892a70 100644
--- a/src/modules/dbus/iface-card.c
+++ b/src/modules/dbus/iface-card.c
@@ -324,7 +324,9 @@ static void handle_get_active_profile(DBusConnection *conn, DBusMessage *msg, vo
static void handle_set_active_profile(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata) {
pa_dbusiface_card *c = userdata;
const char *new_active_path;
- pa_dbusiface_card_profile *new_active;
+ pa_dbusiface_card_profile *profile;
+ void *state;
+ pa_dbusiface_card_profile *new_active = NULL;
int r;
pa_assert(conn);
@@ -334,7 +336,14 @@ static void handle_set_active_profile(DBusConnection *conn, DBusMessage *msg, DB
dbus_message_iter_get_basic(iter, &new_active_path);
- if (!(new_active = pa_hashmap_get(c->profiles, new_active_path))) {
+ PA_HASHMAP_FOREACH(profile, c->profiles, state) {
+ if (pa_streq(pa_dbusiface_card_profile_get_path(profile), new_active_path)) {
+ new_active = profile;
+ break;
+ }
+ }
+
+ if (!new_active) {
pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NOT_FOUND, "%s: No such profile.", new_active_path);
return;
}