[pulseaudio-discuss] [PATCH] Plug some memory leaks and an invalid read
Colin Guthrie
gmane at colin.guthr.ie
Tue Aug 16 02:50:50 PDT 2011
'Twas brillig, and Colin Guthrie at 16/08/11 10:08 did gyre and gimble:
> Just out of curosity, is this what is causing:
>
> I: [pulseaudio] module.c: Unloading "module-alsa-card" (index: #4).
> D: [pulseaudio] protocol-dbus.c: Interface org.PulseAudio.Core1.Device
> removed from object /org/pulseaudio/core1/sink0
> D: [pulseaudio] protocol-dbus.c: Interface org.PulseAudio.Core1.Sink
> removed from object /org/pulseaudio/core1/sink0
> E: [pulseaudio] core.h: Assertion 'pa_object_refcnt(pa_object_cast(o)) >
> 0' failed at ./pulsecore/core.h:184, function pa_core_assert_ref().
> Aborting.
> Aborted
It's not.
This is caused by a pa_core_assert_ref inside an unlink function....
It seems this is not valid when shutting down the server as
pa_core_unref() unrefs itself (thus ref-cnt==0), calls
pa_module_unload_all() which in turn triggers unlink hooks.
So two solutions:
1. Remove such asserts from those hooks that need it.
2. Re-ref/unref the core inside it's free function.
3. Call pa_module_unload_all() && pa_scache_free_all() before calling
pa_core_unref().
2 is hard to do (can't ref something with a ref-cnt already at 0) and 1
is a bit ugly as it imposes different rules on you (i.e. if the core
state is shutdown, then don't use the core), so I think 3 is the right
approach.
Col
--
Colin Guthrie
gmane(at)colin.guthr.ie
http://colin.guthr.ie/
Day Job:
Tribalogic Limited [http://www.tribalogic.net/]
Open Source:
Mageia Contributor [http://www.mageia.org/]
PulseAudio Hacker [http://www.pulseaudio.org/]
Trac Hacker [http://trac.edgewall.org/]
More information about the pulseaudio-discuss
mailing list