playlist_item_t *p_parent, int i_flags,
input_item_t *p_input )
{
- input_item_t *p_new_input;
+ input_item_t *p_new_input = NULL;
playlist_item_t *p_item;
if( !psz_name ) psz_name = _("Undefined");
psz_name, 0, NULL, -1, ITEM_TYPE_NODE );
p_item = playlist_ItemNewFromInput( VLC_OBJECT(p_playlist),
p_input ? p_input : p_new_input );
- if( !p_input )
+ if( p_new_input )
vlc_gc_decref( p_new_input );
if( p_item == NULL ) return NULL;
if( p_root->p_parent )
playlist_NodeRemoveItem( p_playlist, p_root, p_root->p_parent );
- playlist_ItemDelete( p_root );
+ /* Check if it is the current node */
+ if( p_playlist->status.p_node == p_root )
+ {
+ /* Hack we don't call playlist_Control for lock reasons */
+ p_playlist->request.i_status = PLAYLIST_STOPPED;
+ p_playlist->request.b_request = true;
+ p_playlist->request.p_item = NULL;
+ p_playlist->request.p_node = NULL;
+ msg_Info( p_playlist, "stopping playback" );
+ vlc_object_signal_maybe( VLC_OBJECT(p_playlist) );
+
+ PL_DEBUG( "marking %s for further deletion", PLI_NAME( p_root ) );
+ p_root->i_flags |= PLAYLIST_REMOVE_FLAG;
+ }
+ else
+ playlist_ItemDelete( p_root );
+
+
}
return VLC_SUCCESS;
}