#endif
/* Initialize mutexes */
+ vlc_mutex_init( &priv->ml_lock );
vlc_mutex_init( &priv->timer_lock );
vlc_ExitInit( &priv->exit );
/* Destroy mutexes */
vlc_ExitDestroy( &priv->exit );
vlc_mutex_destroy( &priv->timer_lock );
+ vlc_mutex_destroy( &priv->ml_lock );
#ifndef NDEBUG /* Hack to dump leaked objects tree */
if( vlc_internals( p_libvlc )->i_refcount > 1 )
module_t *p_memcpy_module; ///< Fast memcpy plugin used
playlist_t *p_playlist; ///< the playlist singleton
media_library_t *p_ml; ///< the ML singleton
+ vlc_mutex_t ml_lock; ///< Mutex for ML creation
vlm_t *p_vlm; ///< the VLM singleton (or NULL)
vlc_object_t *p_dialog_provider; ///< dialog provider
httpd_t *p_httpd; ///< HTTP daemon (src/network/httpd.c)
media_library_t* ml_Hold( vlc_object_t* p_this )
{
media_library_t* p_ml;
+ vlc_mutex_lock( &( libvlc_priv( p_this->p_libvlc )->ml_lock ) );
p_ml = libvlc_priv (p_this->p_libvlc)->p_ml;
assert( VLC_OBJECT( p_ml ) != p_this );
if( p_ml == NULL &&
}
if( p_ml )
vlc_object_hold( p_ml );
+ vlc_mutex_unlock( &( libvlc_priv( p_this->p_libvlc )->ml_lock ) );
return p_ml;
}