- /* Tell the interface to die */
- vlc_object_kill( p_intf );
- if( p_intf->pf_run )
- vlc_thread_join( p_intf );
+ vlc_list_t *l = vlc_list_find( VLC_OBJECT(p_libvlc), VLC_OBJECT_INTF, FIND_CHILD );
+
+ /* Tell the interfaces to die */
+ for( int i = 0; i < l->i_count; i++ )
+ vlc_object_kill( l->p_values[i].p_object );
+
+ /* Cleanup the interfaces */
+ for( int i = 0; i < l->i_count; i++ )
+ {
+ intf_thread_t *p_intf = (intf_thread_t *)l->p_values[i].p_object;
+
+ if( p_intf->pf_run )
+ vlc_thread_join( p_intf );
+ module_unneed( p_intf, p_intf->p_module );
+ free( p_intf->psz_intf );
+ config_ChainDestroy( p_intf->p_cfg );
+ }