[pulseaudio-discuss] Are "_ref" and "_unref" not necessarily called in pairs?

Colin Guthrie gmane at colin.guthr.ie
Thu May 12 02:06:25 PDT 2011


As per the subject question... Yes, they are supposed to be called in
pairs... BUT....

'Twas brillig, and Lin, Mengdong at 12/05/11 09:31 did gyre and gimble:
> For example, in file “module-suspend-on-idle.c “, why does the slot
> function “sink_input_state_changed_hook_cb” only reference the sink
> input but never unreference it?
> So the reference count of the sink input will only increase? Does it matter?
> Here is the code:   
> static pa_hook_result_t sink_input_state_changed_hook_cb(pa_core *c,
> pa_sink_input *s, struct userdata *u) {
>     struct device_info *d;
>     pa_sink_input_state_t state;
>     pa_assert(c);
>     pa_sink_input_assert_ref(s);  … the sink input is referenced here.
> But where pa_sink_input_unref(s) is called?

This is not the same as pa_sink_input_ref(). Note the word "assert" in
the "function" call in the code above (it's actually a define, not a
function but I won't split hairs with myself :D).

Here all that is happening is ensuring that the sink_input object is

The code is in pulsecore/object.h

See lines 91, and 69.

The code basically means assert if the object is not referenced. This is
a safefy thing to ensure good programming of modules etc.

Hope that clarifies things.



Colin Guthrie

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