Hiya, 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 referenced... 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. 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/]