[vlc-devel] [PATCH 05/18] gui/qt: use vlc_playlist_locker in PLModel::dropMove

Filip Roséen filip at videolabs.io
Wed Jul 20 04:36:55 CEST 2016


---
 .../gui/qt/components/playlist/playlist_model.cpp  | 88 +++++++++++-----------
 1 file changed, 43 insertions(+), 45 deletions(-)

diff --git a/modules/gui/qt/components/playlist/playlist_model.cpp b/modules/gui/qt/components/playlist/playlist_model.cpp
index b4bcd6d..a62c8ce 100644
--- a/modules/gui/qt/components/playlist/playlist_model.cpp
+++ b/modules/gui/qt/components/playlist/playlist_model.cpp
@@ -197,64 +197,62 @@ void PLModel::dropMove( const PlMimeData * plMimeData, PLItem *target, int row )
                calloc( inputItems.count(), sizeof( playlist_item_t* ) );
     if ( !pp_items ) return;
 
-    PL_LOCK;
-
-    playlist_item_t *p_parent =
-        playlist_ItemGetByInput( p_playlist, target->inputItem() );
+    int model_pos;
 
-    if( !p_parent || row > p_parent->i_children )
     {
-        PL_UNLOCK;
-        free( pp_items );
-        return;
-    }
+        vlc_playlist_locker pl_lock ( THEPL );
 
-    int new_pos = row == -1 ? p_parent->i_children : row;
-    int model_pos = new_pos;
-    int i = 0;
+        playlist_item_t *p_parent =
+            playlist_ItemGetByInput( p_playlist, target->inputItem() );
 
-    foreach( input_item_t *p_input, inputItems )
-    {
-        playlist_item_t *p_item = playlist_ItemGetByInput( p_playlist, p_input );
-        if( !p_item ) continue;
+        if( !p_parent || row > p_parent->i_children )
+        {
+            free( pp_items );
+            return;
+        }
 
-        PLItem *item = findByInputId( rootItem, p_input->i_id );
-        if( !item ) continue;
+        int new_pos = model_pos = row == -1 ? p_parent->i_children : row;
+        int i = 0;
 
-        /* Better not try to move a node into itself.
-           Abort the whole operation in that case,
-           because it is ambiguous. */
-        AbstractPLItem *climber = target;
-        while( climber )
+        foreach( input_item_t *p_input, inputItems )
         {
-            if( climber == item )
+            playlist_item_t *p_item = playlist_ItemGetByInput( p_playlist, p_input );
+            if( !p_item ) continue;
+
+            PLItem *item = findByInputId( rootItem, p_input->i_id );
+            if( !item ) continue;
+
+            /* Better not try to move a node into itself.
+               Abort the whole operation in that case,
+               because it is ambiguous. */
+            AbstractPLItem *climber = target;
+            while( climber )
             {
-                PL_UNLOCK;
-                free( pp_items );
-                return;
+                if( climber == item )
+                {
+                    free( pp_items );
+                    return;
+                }
+                climber = climber->parent();
             }
-            climber = climber->parent();
-        }
 
-        if( item->parent() == target &&
-            target->children.indexOf( item ) < new_pos )
-            model_pos--;
+            if( item->parent() == target &&
+                target->children.indexOf( item ) < new_pos )
+                model_pos--;
 
-        model_items.append( item );
-        pp_items[i] = p_item;
-        i++;
-    }
-
-    if( model_items.isEmpty() )
-    {
-        PL_UNLOCK;
-        free( pp_items );
-        return;
-    }
+            model_items.append( item );
+            pp_items[i] = p_item;
+            i++;
+        }
 
-    playlist_TreeMoveMany( p_playlist, i, pp_items, p_parent, new_pos );
+        if( model_items.isEmpty() )
+        {
+            free( pp_items );
+            return;
+        }
 
-    PL_UNLOCK;
+        playlist_TreeMoveMany( p_playlist, i, pp_items, p_parent, new_pos );
+    }
 
     foreach( PLItem *item, model_items )
         takeItem( item );
-- 
2.9.0



More information about the vlc-devel mailing list