[vlc-devel] commit: Qt4: store input_item_t* in plitem and handle metadata in model ( Ilkka Ollakka )

Pierre d'Herbemont pdherbemont at gmail.com
Fri Aug 14 11:11:58 CEST 2009


On Aug 13, 2009, at 11:52 PM, Jakob Leben wrote:

> Now if the other thread simply deleted some items and we have  
> reference counting, our pointers to them would still be valid.

You are right.

> But imagine that in the time when we don't hold the lock the other  
> thread adds a child to the playlist item, so changes it's  
> pp_children field, but then unreferences both the item and its new  
> child, before we could add a reference to the child! The former item  
> will still exist as we had a reference to it, but with wrong  
> reference to a child that got already deleted, as we didn't add a  
> reference for it.

That's one of the weakness of the playlist. However, this won't happen  
as playlist_item are only freed when the playlist is freed. See src/ 
playlist/item.c

int playlist_ItemRelease( playlist_item_t *p_item )
{
	/* For the assert */
	playlist_t *p_playlist = p_item->p_playlist;
	PL_ASSERT_LOCKED;

	/* Surprise, we can't actually do more because we
	* don't do refcounting, or eauivalent.
	* Because item are not only accessed by their id
	* using playlist_item outside the PL_LOCK isn't safe.
	* modules do that.
	*
	* Who wants to add proper memory management? */
	uninstall_input_item_observer( p_item );
	ARRAY_APPEND( pl_priv(p_playlist)->items_to_delete, p_item);
	return VLC_SUCCESS;
}


Pierre.



More information about the vlc-devel mailing list