- playlist_item_t *p_item = playlist_ItemGetById( PL,
- i_id );
- if( !p_item ) RAISEVOID( "Unable to find item" );
-
- playlist_LockControl( PL, PLAYLIST_VIEWPLAY,
- PL->status.p_node, p_item );
+ playlist_item_t *p_item;
+ if (! playlist_was_locked( p_instance ) )
+ {
+ playlist_mark_locked( p_instance, 1 );
+ vlc_mutex_lock( &PL->object_lock );
+ did_lock = 1;
+ }
+
+ p_item = playlist_ItemGetByInputId( PL, i_id,
+ PL->status.p_node );
+ if( !p_item )
+ {
+ if( did_lock == 1 )
+ {
+ vlc_mutex_unlock( &PL->object_lock );
+ playlist_mark_locked( p_instance, 0 );
+ }
+ RAISEVOID( "Unable to find item" );
+ }
+
+ playlist_Control( PL, PLAYLIST_VIEWPLAY, VLC_TRUE,
+ PL->status.p_node, p_item );
+ if( did_lock == 1 )
+ {
+ vlc_mutex_unlock( &PL->object_lock );
+ playlist_mark_locked( p_instance, 0 );
+ }