[pulseaudio-discuss] [PATCH 13/13] Remove refcounting from ports, sinks and sources
Tanu Kaskinen
tanuk at iki.fi
Fri Feb 15 15:55:49 PST 2013
On Thu, 2013-02-14 at 15:02 +0100, David Henningsson wrote:
> On 02/12/2013 08:37 PM, Tanu Kaskinen wrote:
> > since I dislike refcounting, I decided to spend
> > the effort on removing the refcounting from ports instead. That
> > required removing it also from sinks and sources.
> >
> > Ports are now owned solely by cards, except if a sink or source
> > doesn't belong to a card, in which case the sink or source owns its
> > ports.
>
> I chose refcounting for this reason: It is sometimes being owned by
> sinks/sources, and sometimes by cards. Therefore it seemed convenient to
> have refcounting instead of the above scheme; which seems more error prone.
>
> But, how about instead having an "void* owner" pointer in the port? Then
> sink_free could just to "if (port->owner == me) port_free(port);" That
> seems slightly less error prone to me.
I think it's also easier to read. I'll do this change.
> Even if I would say that *this* problem is more about the hashmap: It
> would be better to have a string-key-hashmap type that owned the memory
> of the key strings rather than the current scheme, which cause quite
> subtle errors, such as the one you're currently trying to correct.
I disagree that string-key-hashmap would be the right solution for
*this* problem. The hashmap would still contain stale profile pointers.
If the profile pointers are never dereferenced after the profiles have
been freed, then that wouldn't cause any visible problems, but I think
it's still wrong to store stale pointers, as a principle.
There would probably still be use for a string-key-hashmap class. Or
perhaps the best approach would be to have a hashmap constructor similar
to what GLib uses:
GHashTable *g_hash_table_new_full(GHashFunc hash_func,
GEqualFunc key_equal_func,
GDestroyNotify key_destroy_func,
GDestroyNotify value_destroy_func);
That is suitable for the suggested "string-key-hashmap" use case and
also for the current convention of not having a separate free function
for the keys. I quite like this approach, so if this gets support, I
volunteer to implement this.
--
Tanu
More information about the pulseaudio-discuss
mailing list