That is the same problem as we already had with other object types.
The interface really needs to unload when its owner stops it, not when
the reference counter drops to zero. This fixes a reference dead loop
when an interface yields itself (such as Qt through the view menu) and
a crash if an interface releases itself last (unmapping the running
caller code).
{
intf_thread_t *p_intf = (intf_thread_t *)obj;
- /* Unlock module if present (a switch may have failed) */
- if( p_intf->p_module )
- module_unneed( p_intf, p_intf->p_module );
-
free( p_intf->psz_intf );
config_ChainDestroy( p_intf->p_cfg );
vlc_mutex_destroy( &p_intf->change_lock );
/* Tell the interface to die */
vlc_object_kill( p_intf );
vlc_thread_join( p_intf );
+
+ module_unneed( p_intf, p_intf->p_module );
}