[pulseaudio-discuss] [PATCH] dbus: Fix Device.SetActivePort() handler

Tanu Kaskinen tanu.kaskinen at linux.intel.com
Sun Nov 2 10:50:37 PST 2014


The old code tried to look up the port object by using an object path,
but the ports hashmap uses port names as keys, so the method failed
always.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=85369
---
 src/modules/dbus/iface-device.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/modules/dbus/iface-device.c b/src/modules/dbus/iface-device.c
index 625f057..d469483 100644
--- a/src/modules/dbus/iface-device.c
+++ b/src/modules/dbus/iface-device.c
@@ -725,6 +725,8 @@ static void handle_get_active_port(DBusConnection *conn, DBusMessage *msg, void
 static void handle_set_active_port(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata) {
     pa_dbusiface_device *d = userdata;
     const char *new_active_path;
+    pa_dbusiface_device_port *port;
+    void *state;
     pa_dbusiface_device_port *new_active;
     int r;
 
@@ -747,7 +749,14 @@ static void handle_set_active_port(DBusConnection *conn, DBusMessage *msg, DBusM
 
     dbus_message_iter_get_basic(iter, &new_active_path);
 
-    if (!(new_active = pa_hashmap_get(d->ports, new_active_path))) {
+    PA_HASHMAP_FOREACH(port, d->ports, state) {
+        if (pa_streq(pa_dbusiface_device_port_get_path(port), new_active_path)) {
+            new_active = port;
+            break;
+        }
+    }
+
+    if (!new_active) {
         pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NOT_FOUND, "No such port: %s", new_active_path);
         return;
     }
-- 
1.9.3



More information about the pulseaudio-discuss mailing list