]> code.delx.au - pulseaudio/commitdiff
dbus: Use correct initialization for source ports hashmap.
authorJuho Hämäläinen <juho.hamalainen@tieto.com>
Tue, 15 Apr 2014 13:11:48 +0000 (16:11 +0300)
committerTanu Kaskinen <tanu.kaskinen@linux.intel.com>
Thu, 17 Apr 2014 08:13:01 +0000 (11:13 +0300)
Source ports hashmap is created without value freeing function, which
results in (hashmap values) device ports not being freed when source
ports are removed or module is unloaded. This results in memory leak
during normal operation and during daemon shutdown dbus_protocol shared
object isn't unreferenced correctly, leaving dbus_protocol object in
core->shared, which causes assert when shared hashmap is checked for
isempty() before freeing.

src/modules/dbus/iface-device.c

index 34b370b557c9b0fa573bb583b2f9157317a8591e..625f057a5262d5331063f939e0abf3563eb44888 100644 (file)
@@ -1248,7 +1248,7 @@ pa_dbusiface_device *pa_dbusiface_device_new_source(pa_dbusiface_core *core, pa_
     d->volume = *pa_source_get_volume(source, false);
     d->mute = pa_source_get_mute(source, false);
     d->source_state = pa_source_get_state(source);
-    d->ports = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
+    d->ports = pa_hashmap_new_full(pa_idxset_string_hash_func, pa_idxset_string_compare_func, NULL, (pa_free_cb_t) pa_dbusiface_device_port_free);
     d->next_port_index = 0;
     d->active_port = source->active_port;
     d->proplist = pa_proplist_copy(source->proplist);