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 | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/modules/dbus/iface-device.c b/src/modules/dbus/iface-device.c
index 34b370b..625f057 100644
--- a/src/modules/dbus/iface-device.c
+++ b/src/modules/dbus/iface-device.c
@@ -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);
--
1.8.5.2
_______________________________________________
pulseaudio-discuss mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss