[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