]> git.sesse.net Git - vlc/commitdiff
Extensions: fix Qt freeze when reloading scripts
authorJean-Philippe André <jpeg@videolan.org>
Wed, 2 Jun 2010 16:47:34 +0000 (00:47 +0800)
committerJean-Philippe André <jpeg@videolan.org>
Wed, 2 Jun 2010 16:54:49 +0000 (00:54 +0800)
Description of the bug:

 This freeze happened only on Windows (tested on XP & Wine), but not on
 Linux. If I only moved up the "killInstance()" line, then the freeze
 would happen only on Linux but not on Windows.
 In these cases the QDialog's destructor never returned.

modules/gui/qt4/dialogs/extensions.cpp
modules/gui/qt4/extensions_manager.cpp

index d765c89907cb2b38fbdb65411083dc78f3ce6532..65bb77590d6341c881dc3d4472774eda792483d2 100644 (file)
@@ -121,8 +121,8 @@ ExtensionDialog* ExtensionsDialogProvider::UpdateExtDialog(
         dialog->has_lock = true;
         dialog->UpdateWidgets();
         if( strcmp( qtu( dialog->windowTitle() ),
-                   p_dialog->psz_title ) != 0 )
-           dialog->setWindowTitle( qfu( p_dialog->psz_title ) );
+                    p_dialog->psz_title ) != 0 )
+            dialog->setWindowTitle( qfu( p_dialog->psz_title ) );
         dialog->has_lock = false;
         dialog->setVisible( !p_dialog->b_hide );
     }
@@ -207,11 +207,6 @@ ExtensionDialog::ExtensionDialog( intf_thread_t *_p_intf,
 ExtensionDialog::~ExtensionDialog()
 {
     msg_Dbg( p_intf, "Deleting extension dialog '%s'", qtu(windowTitle()) );
-    /* Delete all widgets */
-    extension_widget_t *p_widget;
-    p_dialog->b_kill = true;
-    p_dialog->p_sys_intf = NULL;
-    vlc_cond_signal( &p_dialog->cond );
 }
 
 QWidget* ExtensionDialog::CreateWidget( extension_widget_t *p_widget )
index a2724657b2959473ca1826d958e3ec584e5b79cd..35589c84c7cfd6d35d0cad42461e44d9ec7b28f7 100644 (file)
@@ -118,11 +118,10 @@ void ExtensionsManager::unloadExtensions()
     if( !p_extensions_manager )
         return;
     b_unloading = true;
+    ExtensionsDialogProvider::killInstance();
     module_unneed( p_extensions_manager, p_extensions_manager->p_module );
     vlc_object_release( p_extensions_manager );
     p_extensions_manager = NULL;
-    emit extensionsUpdated();
-    ExtensionsDialogProvider::killInstance();
 }
 
 void ExtensionsManager::reloadExtensions()