[pulseaudio-discuss] [PATCH] bluetooth: Free backends before devices and adapters.

Tanu Kaskinen tanuk at iki.fi
Fri Jun 29 15:54:26 UTC 2018


On Thu, 2018-06-28 at 14:58 +0300, Juho Hämäläinen wrote:
> When bluetooth daemon disappears gracefully transports are freed before
> the daemon disappears from DBus bus. However if bluetooth daemon
> segfaults or is killed abruptly the daemon disappears from the bus
> before PulseAudio is able to clean the transports. As the devices
> and adapters are freed before ofono or native backends, PulseAudio
> segfaults when dangling pointers are used when freeing the backends.
> Fix by freeing the backends before devices and adapters when bluetooth
> daemon disappears from DBus bus.
> 
> Signed-off-by: Juho Hämäläinen <jusa at hilvi.org>
> ---
>  src/modules/bluetooth/bluez5-util.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)

I suppose it's the hf_audio_card.transport pointers that are dangling?

Rather than having unobvious ordering requirements, it would seem
better to me to notify the backends when the transports are freed so
that they can drop their references. There's already the destroy()
callback that could be used for this. What do you think?

(Sidenote: the transport ownership semantics are pretty messy. The
backends call transport_new(), but they don't necessarily call
transport_free(). I guess this is justifiable, because the transports
have to be freed when devices are freed anyway, so to fix this there
would have to be some kind of callback that device_free() would call,
and the callback would just call transport_free(), so maybe it's fine
that we currently cut the complexity by calling transport_free()
directly from device_free()...)

-- 
Tanu

https://liberapay.com/tanuk
https://www.patreon.com/tanuk


More information about the pulseaudio-discuss mailing list