]> git.sesse.net Git - vlc/commitdiff
ML: Use a lock for ml_Create
authorSrikanth Raju <srikiraju@gmail.com>
Sat, 3 Jul 2010 18:21:01 +0000 (23:51 +0530)
committerSrikanth Raju <srikiraju@gmail.com>
Sat, 3 Jul 2010 18:21:33 +0000 (23:51 +0530)
src/libvlc.c
src/libvlc.h
src/misc/media_library.c

index 4a1250eafcc517a018439311761cbd059b84b43c..094d2c80a8f74234b4c3458973efc53ef5a992ee 100644 (file)
@@ -229,6 +229,7 @@ libvlc_int_t * libvlc_InternalCreate( void )
 #endif
 
     /* Initialize mutexes */
+    vlc_mutex_init( &priv->ml_lock );
     vlc_mutex_init( &priv->timer_lock );
     vlc_ExitInit( &priv->exit );
 
@@ -1060,6 +1061,7 @@ void libvlc_InternalDestroy( libvlc_int_t *p_libvlc )
     /* 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 )
index 48205b1471b96712a354a811ace5022a0ddef251..69996de313a69f5396a65a61c3b1bdff98e6a86c 100644 (file)
@@ -215,6 +215,7 @@ typedef struct libvlc_priv_t
     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)
index 1223ad1d913d9b1cede0c22464fb81e176d7ea45..18f22995771d25c742d7ba24af2d10b751bf1b18 100644 (file)
@@ -111,6 +111,7 @@ media_library_t *ml_Create( vlc_object_t *p_this, char *psz_name )
 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 &&
@@ -122,6 +123,7 @@ media_library_t* ml_Hold( vlc_object_t* p_this )
     }
     if( p_ml )
         vlc_object_hold( p_ml );
+    vlc_mutex_unlock( &( libvlc_priv( p_this->p_libvlc )->ml_lock ) );
     return p_ml;
 }