The last patch is what I originally wanted to do, but while doing it, other stuff came into the way... These patches require also this patch to apply cleanly: http://thread.gmane.org/gmane.comp.audio.pulseaudio.general/13457 Note that the last patch contains a FIXME item, which depends on the patches that remove the possibility to have dual-direction ports. Those patches still need some more work, however, so I decided to send this patch series with the known crash condition anyway. Since a dual-direction port is so corner case, I'd be ok with applying these patches already now, but I can also understand and accept it if others refuse to knowingly introduce crashing code. Applying only the first four patches would be fine too. Tanu Kaskinen (5): sink, source: Always create a hashmap for ports. card: Ensure that there's always at least one profile. Assume that the profiles hashmap of ports is always non-NULL. Assume that the ports hashmap of cards is always non-NULL. sink, source: New functions: pa_{sink,source}_new_data_add_port(). src/modules/alsa/alsa-mixer.c | 35 +++++--- src/modules/alsa/alsa-mixer.h | 4 +- src/modules/alsa/alsa-sink.c | 2 +- src/modules/alsa/alsa-source.c | 2 +- src/modules/alsa/module-alsa-card.c | 1 - src/modules/bluetooth/module-bluetooth-device.c | 27 ++---- src/modules/dbus/iface-card.c | 41 ++------- src/modules/dbus/iface-device.c | 32 +++---- src/modules/module-card-restore.c | 2 +- src/modules/module-switch-on-port-available.c | 74 +++++++-------- src/pulsecore/card.c | 10 ++- src/pulsecore/cli-command.c | 3 +- src/pulsecore/cli-text.c | 26 +++--- src/pulsecore/protocol-native.c | 109 ++++++++++------------- src/pulsecore/sink.c | 15 +++- src/pulsecore/sink.h | 1 + src/pulsecore/source.c | 15 +++- src/pulsecore/source.h | 1 + 18 files changed, 184 insertions(+), 216 deletions(-) -- 1.7.10