From: RĂ©mi Duraffort Date: Wed, 11 Feb 2009 14:50:00 +0000 (+0100) Subject: Playlist have to be lock for playlist_ItemGetByInput too. X-Git-Tag: 1.0.0-pre1~728 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=f88693fed217b8df6b359dcec63f7a35494e0c10;p=vlc Playlist have to be lock for playlist_ItemGetByInput too. --- diff --git a/include/vlc_playlist.h b/include/vlc_playlist.h index c339b825f2..c30a09b9ce 100644 --- a/include/vlc_playlist.h +++ b/include/vlc_playlist.h @@ -323,7 +323,7 @@ VLC_EXPORT( playlist_item_t*, playlist_ItemToNode, (playlist_t *,playlist_item_t /********************************** Item search *************************/ VLC_EXPORT( playlist_item_t *, playlist_ItemGetById, (playlist_t *, int ) ); -VLC_EXPORT( playlist_item_t *, playlist_ItemGetByInput, (playlist_t *,input_item_t *, bool ) ); +VLC_EXPORT( playlist_item_t *, playlist_ItemGetByInput, (playlist_t *,input_item_t * ) ); VLC_EXPORT( playlist_item_t *, playlist_ItemGetByInputId, (playlist_t *, int, playlist_item_t *) ); VLC_EXPORT( int, playlist_LiveSearchUpdate, (playlist_t *, playlist_item_t *, const char *) ); diff --git a/modules/control/http/rpn.c b/modules/control/http/rpn.c index e58bcf560e..e4689ffc6c 100644 --- a/modules/control/http/rpn.c +++ b/modules/control/http/rpn.c @@ -854,11 +854,12 @@ void EvaluateRPN( intf_thread_t *p_intf, mvar_t *vars, { playlist_item_t *p_item; msg_Dbg( p_intf, "requested mrl add: %s", mrl ); + playlist_Lock( p_sys->p_playlist ); p_item = playlist_ItemGetByInput( p_sys->p_playlist, - p_input, - pl_Unlocked ); + p_input ); if( p_item ) i_ret = p_item->i_id; + playlist_Unlock( p_sys->p_playlist ); } else msg_Warn( p_intf, "adding mrl %s failed", mrl ); diff --git a/modules/gui/macosx/playlist.m b/modules/gui/macosx/playlist.m index de5fff9e76..14018c6948 100644 --- a/modules/gui/macosx/playlist.m +++ b/modules/gui/macosx/playlist.m @@ -1120,7 +1120,7 @@ { playlist_item_t *p_item = NULL; playlist_item_t *p_node = NULL; - p_item = playlist_ItemGetByInput( p_playlist, p_input, pl_Locked ); + p_item = playlist_ItemGetByInput( p_playlist, p_input ); if( p_item ) { if( p_item->i_children == -1 ) @@ -1173,7 +1173,7 @@ if( i_item == 0 && !b_enqueue ) { playlist_item_t *p_item; - p_item = playlist_ItemGetByInput( p_playlist, p_input, pl_Locked ); + p_item = playlist_ItemGetByInput( p_playlist, p_input ); playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, pl_Locked, p_node, p_item ); } PL_UNLOCK; diff --git a/modules/gui/macosx/wizard.m b/modules/gui/macosx/wizard.m index e2344aeddc..52c3086eab 100644 --- a/modules/gui/macosx/wizard.m +++ b/modules/gui/macosx/wizard.m @@ -1312,7 +1312,7 @@ static VLCWizard *_o_sharedInstance = nil; { /* play the first item and add the others afterwards */ PL_LOCK; - playlist_item_t *p_item = playlist_ItemGetByInput( p_playlist, p_input, pl_Locked ); + playlist_item_t *p_item = playlist_ItemGetByInput( p_playlist, p_input ); playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, pl_Locked, NULL, p_item ); PL_UNLOCK; diff --git a/src/playlist/search.c b/src/playlist/search.c index f7708b5824..66bd3ad092 100644 --- a/src/playlist/search.c +++ b/src/playlist/search.c @@ -53,36 +53,29 @@ playlist_item_t* playlist_ItemGetById( playlist_t * p_playlist , int i_id ) /** * Search an item by its input_item_t - * - * \param p_playlist the playlist - * \param p_item the input_item_t to find - * \return the item, or NULL on failure + * The playlist have to be locked + * @param p_playlist: the playlist + * @param p_item: the input_item_t to find + * @return the item, or NULL on failure */ -playlist_item_t * playlist_ItemGetByInput( playlist_t * p_playlist , - input_item_t *p_item, - bool b_locked ) +playlist_item_t* playlist_ItemGetByInput( playlist_t * p_playlist, + input_item_t *p_item ) { int i; - PL_LOCK_IF( !b_locked ); + PL_ASSERT_LOCKED; if( get_current_status_item( p_playlist ) && get_current_status_item( p_playlist )->p_input == p_item ) { - /* FIXME: this is potentially dangerous, we could destroy - * p_ret any time soon */ - playlist_item_t *p_ret = get_current_status_item( p_playlist ); - PL_UNLOCK_IF( !b_locked ); - return p_ret; + return get_current_status_item( p_playlist ); } /** \todo Check if this is always incremental and whether we can bsearch */ for( i = 0 ; i < p_playlist->all_items.i_size; i++ ) { if( ARRAY_VAL(p_playlist->all_items, i)->p_input->i_id == p_item->i_id ) { - PL_UNLOCK_IF( !b_locked ); return ARRAY_VAL(p_playlist->all_items, i); } } - PL_UNLOCK_IF( !b_locked ); return NULL; }