Qt4: fix segfault when exiting after a service discovery has been activated
authorJakob Leben <jleben@videolan.org>
Sun, 13 Sep 2009 23:26:20 +0000 (01:26 +0200)
committerJakob Leben <jleben@videolan.org>
Sun, 13 Sep 2009 23:27:39 +0000 (01:27 +0200)
modules/gui/qt4/components/playlist/playlist_model.cpp

index e271e2d..fdb9f41 100644 (file)
@@ -526,6 +526,7 @@ PLItem *PLModel::findByInput( PLItem *root, int i_id )
 
 PLItem * PLModel::findInner( PLItem *root, int i_id, bool b_input )
 {
+    if( !root ) return NULL;
     if( ( !b_input && i_cached_id == i_id) ||
         ( b_input && i_cached_input_id ==i_id ) )
     {
@@ -755,14 +756,21 @@ void PLModel::insertChildren( PLItem *node, QList<PLItem*>& items, int i_pos )
 void PLModel::removeItem( PLItem *item )
 {
     if( !item ) return;
+
     if( currentItem == item )
     {
         currentItem = NULL;
         emit currentChanged( QModelIndex() );
     }
-    PLItem *parent = item->parentItem;
-    assert( parent );
-    parent->removeChild( item );
+
+    if( item->parentItem ) item->parentItem->removeChild( item );
+    else delete item;
+
+    if(item == rootItem)
+    {
+        rootItem = NULL;
+        reset();
+    }
 }
 
 /* This function must be entered WITH the playlist lock */