]> git.sesse.net Git - vlc/commitdiff
Unload interface plugin in StopThread rather than destroy
authorRémi Denis-Courmont <remi@remlab.net>
Tue, 17 Mar 2009 18:14:11 +0000 (20:14 +0200)
committerRémi Denis-Courmont <remi@remlab.net>
Tue, 17 Mar 2009 18:14:11 +0000 (20:14 +0200)
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).

src/interface/interface.c

index 41cb47804d6180a8a5401d49b7bfa2407b78f40b..ca4ae334d8bfee1e23e2bc41b21b3326e3a1b158 100644 (file)
@@ -67,10 +67,6 @@ static void intf_Destroy( vlc_object_t *obj )
 {
     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 );
@@ -182,6 +178,8 @@ void intf_StopThread( intf_thread_t *p_intf )
     /* Tell the interface to die */
     vlc_object_kill( p_intf );
     vlc_thread_join( p_intf );
+
+    module_unneed( p_intf, p_intf->p_module );
 }