msg_Err( p_playlist, "unknown playlist query" );
return VLC_EBADVAR;
}
- vlc_object_signal_unlocked( p_playlist );
+ vlc_cond_signal( &pl_priv(p_playlist)->signal );
return VLC_SUCCESS;
}
PL_LOCK;
pl_priv(p_playlist)->b_reset_currently_playing = true;
- vlc_object_signal_unlocked( p_playlist );
+ vlc_cond_signal( &pl_priv(p_playlist)->signal );
PL_UNLOCK;
return VLC_SUCCESS;
libvlc_priv(p_parent->p_libvlc)->p_playlist = p_playlist;
VariablesInit( p_playlist );
+ vlc_cond_init( &p->signal );
/* Initialise data structures */
pl_priv(p_playlist)->i_last_playlist_id = 0;
assert( !p_sys->p_preparser );
assert( !p_sys->p_fetcher );
+ vlc_cond_destroy( &p_sys->signal );
msg_Dbg( p_this, "Destroyed" );
}
p_playlist->p_root_onelevel, false );
}
pl_priv(p_playlist)->b_reset_currently_playing = true;
- vlc_object_signal_unlocked( p_playlist );
+ vlc_cond_signal( &pl_priv(p_playlist)->signal );
var_SetInteger( p_playlist, "item-change", p_item_in_category->
p_input->i_id );
PL_UNLOCK_IF( !b_locked );
else
i_ret = TreeMove( p_playlist, p_item, p_node, i_newpos );
pl_priv(p_playlist)->b_reset_currently_playing = true;
- vlc_object_signal_unlocked( p_playlist );
+ vlc_cond_signal( &pl_priv(p_playlist)->signal );
return i_ret;
}
val.p_address = p_add;
pl_priv(p_playlist)->b_reset_currently_playing = true;
if( b_signal )
- vlc_object_signal_unlocked( p_playlist );
+ vlc_cond_signal( &pl_priv(p_playlist)->signal );
var_Set( p_playlist, "item-append", val );
free( p_add );
if( pl_priv(p_playlist)->p_input )
input_StopThread( pl_priv(p_playlist)->p_input );
pl_priv(p_playlist)->request.i_status = PLAYLIST_RUNNING;
- vlc_object_signal_unlocked( p_playlist );
+ vlc_cond_signal( &pl_priv(p_playlist)->signal );
}
/* Preparse if PREPARSE or SPREPARSE & not enough meta */
char *psz_artist = input_item_GetArtist( p_item_cat->p_input );
pl_priv(p_playlist)->request.b_request = true;
pl_priv(p_playlist)->request.p_item = NULL;
msg_Info( p_playlist, "stopping playback" );
- vlc_object_signal_unlocked( VLC_OBJECT(p_playlist) );
+ vlc_cond_signal( &pl_priv(p_playlist)->signal );
}
}
vlc_mutex_t lock; /**< Lock to protect request */
} request;
+ vlc_cond_t signal; /**< wakes up the playlist engine thread */
+
int i_last_playlist_id; /**< Last id to an item */
bool b_reset_currently_playing; /** Reset current item array */
PL_ASSERT_LOCKED;
pl_priv(p_playlist)->b_reset_currently_playing = true;
playlist_LiveSearchUpdateInternal( p_playlist, p_root, psz_string );
- vlc_object_signal_unlocked( p_playlist );
+ vlc_cond_signal( &pl_priv(p_playlist)->signal );
return VLC_SUCCESS;
}
msg_Dbg( p_playlist, "Deactivate" );
vlc_object_kill( p_playlist );
+ PL_LOCK;
+ vlc_cond_signal( &p_sys->signal );
+ PL_UNLOCK;
+
vlc_thread_join( p_playlist );
assert( !p_sys->p_input );
PL_LOCK;
- vlc_object_signal_unlocked( p_playlist );
+ /* XXX: signaling while not changing any parameter... suspicious... */
+ vlc_cond_signal( &pl_priv(p_playlist)->signal );
PL_UNLOCK;
return VLC_SUCCESS;
input_ressource_TerminateVout( p_sys->p_input_ressource );
if( vlc_object_alive( p_playlist ) )
- vlc_object_wait( p_playlist );
+ vlc_cond_wait( &pl_priv(p_playlist)->signal,
+ &vlc_internals(p_playlist)->lock );
return;
}
/* If there is an input, check that it doesn't need to die. */
while( !LoopInput( p_playlist ) )
- vlc_object_wait( p_playlist );
+ vlc_cond_wait( &pl_priv(p_playlist)->signal,
+ &vlc_internals(p_playlist)->lock );
LoopRequest( p_playlist );
}