]> git.sesse.net Git - vlc/blobdiff - src/control/media_list_view.c
src/control/media_instance.c: Don't wait to have modulo something, to forward the...
[vlc] / src / control / media_list_view.c
index 90a911f02152a3ae7eb8ce90752195f6534f28fc..c3bb901c9d3b245475be5764c39533acfdb01ee2 100644 (file)
@@ -74,9 +74,13 @@ uninstall_md_listener( libvlc_media_list_view_t * p_mlv,
                        libvlc_media_descriptor_t * p_md)
 {
     libvlc_media_list_t * p_mlist;
+    libvlc_exception_t ignored_exception;
+    libvlc_exception_init( &ignored_exception );
     libvlc_event_detach( p_md->p_event_manager,
                          libvlc_MediaDescriptorSubItemAdded,
-                         media_list_subitem_added, p_mlv, NULL );
+                         media_list_subitem_added, p_mlv, &ignored_exception );
+    if( libvlc_exception_raised( &ignored_exception ) )
+        libvlc_exception_clear( &ignored_exception ); /* We don't care if we encounter an exception */
     if((p_mlist = libvlc_media_descriptor_subitems( p_md, NULL )))
     {
         libvlc_media_list_lock( p_mlist );
@@ -129,6 +133,7 @@ media_list_subitem_added( const libvlc_event_t * p_event, void * p_user_data )
  */
 /**************************************************************************
  *       libvlc_media_list_view_set_ml_notification_callback (Internal)
+ * The mlist lock should be held when entered
  **************************************************************************/
 void
 libvlc_media_list_view_set_ml_notification_callback(
@@ -138,7 +143,6 @@ libvlc_media_list_view_set_ml_notification_callback(
 {
     p_mlv->pf_ml_item_added = item_added;
     p_mlv->pf_ml_item_removed = item_removed;
-    libvlc_media_list_lock( p_mlv->p_mlist );
     libvlc_event_attach( p_mlv->p_mlist->p_event_manager,
                          libvlc_MediaListItemAdded,
                          media_list_item_added, p_mlv, NULL );
@@ -153,7 +157,6 @@ libvlc_media_list_view_set_ml_notification_callback(
         install_md_listener( p_mlv, p_md );
         libvlc_media_descriptor_release( p_md );
     }
-    libvlc_media_list_unlock( p_mlv->p_mlist );
 }
 
 /**************************************************************************
@@ -358,6 +361,22 @@ libvlc_media_list_view_event_manager( libvlc_media_list_view_t * p_mlv )
     return p_em;
 }
 
+/**************************************************************************
+ *       libvlc_media_list_view_parent_media_list (Public)
+ **************************************************************************/
+libvlc_media_list_t *
+libvlc_media_list_view_parent_media_list( libvlc_media_list_view_t * p_mlv,
+                                         libvlc_exception_t * p_e)
+{
+    (void)p_e;
+    libvlc_media_list_t * p_mlist;
+    vlc_mutex_lock( &p_mlv->object_lock );
+    p_mlist = p_mlv->p_mlist;
+    libvlc_media_list_retain( p_mlv->p_mlist );
+    vlc_mutex_unlock( &p_mlv->object_lock );
+    return p_mlist;
+}
+
 /* Limited to four args, because it should be enough */
 
 #define AN_SELECT( collapser, dec1, dec2, dec3, dec4, p, ...) p