]> git.sesse.net Git - vlc/commitdiff
playlist: reduce lock contention and do not pretend to handle error
authorRémi Denis-Courmont <remi@remlab.net>
Sat, 15 Nov 2014 10:28:40 +0000 (12:28 +0200)
committerRémi Denis-Courmont <remi@remlab.net>
Sat, 15 Nov 2014 10:28:40 +0000 (12:28 +0200)
src/playlist/engine.c

index 00bfb610c5229f1ab7c9c199bc3a9a6cc96460af..990bcb1b63c622249fa1733f10c34e4523e89ea1 100644 (file)
@@ -229,38 +229,27 @@ playlist_t *playlist_Create( vlc_object_t *p_parent )
 
     pl_priv(p_playlist)->b_tree = var_InheritBool( p_parent, "playlist-tree" );
 
-    /* Create the root node */
-    PL_LOCK;
-    p_playlist->p_root = playlist_NodeCreate( p_playlist, NULL, NULL,
-                                    PLAYLIST_END, 0, NULL );
-    PL_UNLOCK;
-    if( !p_playlist->p_root ) return NULL;
+    /* Create the root, playing items and meida library nodes */
+    playlist_item_t *root, *playing, *ml;
 
-    /* Create currently playing items node */
     PL_LOCK;
-    p_playlist->p_playing = playlist_NodeCreate(
-        p_playlist, _( "Playlist" ), p_playlist->p_root,
-        PLAYLIST_END, PLAYLIST_RO_FLAG, NULL );
-
+    root = playlist_NodeCreate( p_playlist, NULL, NULL,
+                                PLAYLIST_END, 0, NULL );
+    playing = playlist_NodeCreate( p_playlist, _( "Playlist" ), root,
+                                   PLAYLIST_END, PLAYLIST_RO_FLAG, NULL );
+    if( var_InheritBool( p_parent, "media-library") )
+        ml = playlist_NodeCreate( p_playlist, _( "Media Library" ), root,
+                                  PLAYLIST_END, PLAYLIST_RO_FLAG, NULL );
+    else
+        ml = NULL;
     PL_UNLOCK;
 
-    if( !p_playlist->p_playing ) return NULL;
-
-    /* Create media library node */
-    const bool b_ml = var_InheritBool( p_parent, "media-library");
-    if( b_ml )
-    {
-        PL_LOCK;
-        p_playlist->p_media_library = playlist_NodeCreate(
-            p_playlist, _( "Media Library" ), p_playlist->p_root,
-            PLAYLIST_END, PLAYLIST_RO_FLAG, NULL );
-        PL_UNLOCK;
-    }
-    else
-    {
-        p_playlist->p_media_library = NULL;
-    }
+    if( unlikely(root == NULL || playing == NULL || ml == NULL) )
+        abort();
 
+    p_playlist->p_root = root;
+    p_playlist->p_playing = playing;
+    p_playlist->p_media_library = ml;
     p_playlist->p_root_category = p_playlist->p_root;
     p_playlist->p_root_onelevel = p_playlist->p_root;
     p_playlist->p_local_category = p_playlist->p_playing;
@@ -274,7 +263,7 @@ playlist_t *playlist_Create( vlc_object_t *p_parent )
     pl_priv(p_playlist)->request.b_request = false;
     pl_priv(p_playlist)->status.i_status = PLAYLIST_STOPPED;
 
-    if(b_ml)
+    if (ml != NULL)
         playlist_MLLoad( p_playlist );
 
     /* Preparser (and meta retriever) _after_ the Media Library*/